我正在使用Apache Shiro 1.2开发基于vaadin的项目以确保安全性。我有'记住我'功能的问题。我尝试使用CookieRememberMeManager作为RememberMeManager,但在验证后,Subject.isRemembered()始终返回false。
public class ApplicationSecurityManager extends DefaultSecurityManager {
public ApplicationSecurityManager(Realm singleRealm) {
super(singleRealm);
setRememberMeManager(new CookieRememberMeManager());
}
}
我在GuiceFilter的init方法中设置了SecurityManager。
final Realm realm = new ApplicationSecurityRealm();
final SecurityManager securityManager = new ApplicationSecurityManager(realm);
SecurityUtils.setSecurityManager(securityManager);
当我尝试登录我的应用程序时,除了“记住我”功能外,一切正常。 代码:
final Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
token.setRememberMe(rememberMe);
currentUser.login(token);
应用程序没有例外,我无法使用调试解决此问题。 我使用Apache Tomcat 7.0.40,它可以禁止cookie吗?
P.S。对不起我的英语,我不是来自英语国家。
答案 0 :(得分:1)
我意识到已经过了一年,但这个问题得到了相当多的观点,所以我想我会发布一些信息。
在Shiro中,Subject.isRemembered()有点棘手。如果主题具有有效的“记住我”设置(cookie等)并且主题未经过身份验证,则它仅返回true。详情请见http://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/subject/Subject.html#isRemembered()
所以,我怀疑你的记住我工作正常,但你对Subject.isRemembered()的期望与方法实际上没有匹配。