[英]Adding attributes to Wicket session
有一个WebSession的实现,应该存储已登录用户的ID:
public class SecurityWebSession extends AuthenticatedWebSession {
public SecurityWebSession(Request request) {
super(request);
bind();
}
...
@Override
public boolean authenticate(String username, String password) {
user = usersFacadeLocal.findByEmail(username);
if (user != null) {
try {
boolean valid = PasswordHash.validatePassword(password, user.getPassword());
if (valid) {
WebSession.get().setAttribute(USER_ID, user.getId());
}
return valid;
} catch (Exception ex) {
logger.error("Authenticate ERROR", ex);
}
}
return false;
}
}
但是,当我访问SecurityWebSession以从WebPage类获取登录用户的ID时,它将返回null。 我发现Session不存储从其主体添加的值。 但是,如果从从Wicket的WebPage继承的类中设置值,则可以完美地存储值。
我没有在文档中找到关于这种情况的任何提及。 如何从会话添加到会话属性?
您是否偶然使用Wicket 6.19.0?
如果是这种情况,那么您可以访问https://issues.apache.org/jira/browse/WICKET-5845 。 在6.20.0中已修复。
如果不是这种情况,请创建一个包含问题快速启动应用程序的新故障单。 谢谢!
我猜问题出在AuthenticatedWebSession.signIn(final String username, final String password)
。
这个调用您的authenticate
方法,并将再次destroy()
您的会话(并bind()
(这样做是为了避免会话固定)。
但是,您可以通过覆盖replaceSession()
来临时存储所需的值:
// this will be called *after* a successful authenticate
@Override
public void replaceSession() {
//temp store any values you want to carry over to the new session...
super.replaceSession();
//reset them to the session after super.replaceSession();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.