在nutz.cn 中 ,登陆时加上了rememberMe
在shiro中是在什么地方实现的存储cookies, 在下次登陆时如何将 me 放到session中
另外如何更改
subject.getSession().setAttribute(NutShiro.SessionKey, subject.getPrincipal());
中的subject.getPrincipal() 的值
@wendal 那如果添加了cookie ,在后面登陆时怎么取得用户信息?
@Rekoe 我再页面上加了选项,再次登陆时@RequiresUser 这里可以过,识别出来了
但是session里面是空的
你后端需要设置这个属性
rememberMe 是true 么
public class CaptchaUsernamePasswordToken extends UsernamePasswordToken {
private static final long serialVersionUID = 4676958151524148623L;
private String captcha;
public String getCaptcha() {
return captcha;
}
public void setCaptcha(String captcha) {
this.captcha = captcha;
}
public CaptchaUsernamePasswordToken(String username, String password, boolean rememberMe, String host, String captcha) {
super(username, password, rememberMe, host);
this.captcha = captcha;
}
}
@Rekoe 我跟到这个类了,提交时rememberMe 就是true ,cookie 也写入了 key就是rememberMe
但是重启tomcat后能够进入@RequiresUser 标记的方法,session me是空的
我这样改了一下,不知道合理不合理,麻烦帮忙看下吧
目前测试是可以生效的
shiro.ini
authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter
authc.loginUrl = /user/login
logout.redirectUrl= /user/login
[urls]
/rs/* = anon
/user/logout = logout
/user/error = anon
/user/profile/active/mail = anon
/** = authc
然后在 CaptchaFormAuthenticationFilter 中
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
Subject subject = getSubject(request, response);
if(!subject.isAuthenticated() && subject.isRemembered()){
Session session = subject.getSession(true);
if(session.getAttribute(NutShiro.SessionKey) == null){
subject.getSession().setAttribute(NutShiro.SessionKey, (Long)subject.getPrincipal());
}
}
return subject.isAuthenticated() || subject.isRemembered();
}