我正在使用带有FORM身份验证的Tomcat领域。身份验证完成后,我想在会话中保存一个对象,但无法弄清楚如何获取会话。
import org.apache.catalina.realm.RealmBase;
public class MyRealm extends RealmBase {
@Override
public Principal authenticate(String username, String credentials) {
// get session here
return super.authenticate(username, credentials);
}
原因是我之前有一个登录 servlet,并且使用我自己的身份验证,现在我需要切换到 Tomcat Realm 并基本上将登录 servlet 代码迁移到我的自定义 Realm 类。登录成功后,我需要创建一个包含会话特定对象的对象并将其放入当前会话中。我需要用户名和密码来创建它,所以 authenticate(( 方法似乎只是这样做的地方。
我总是这样做的方式是在身份验证完成后运行Filter
。如果HttpSession
包含用户令牌,那么我什么都不做并调用链。如果HttpSession
不包含该用户令牌,我将执行所有需要执行的操作,以使用请求中可用的Principal
设置会话(因为身份验证已经发生(。
听起来这并不需要成为身份验证(Realm(的一部分,因此请将两者分开。