繁体   English   中英

向Wicket会话添加属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM