RememberMe
Shiro 提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:
首先在登录页面选中 RememberMe 然后登录成功;如果是浏览器登录,一般会把 RememberMe 的 Cookie 写到客户端并保存下来;
关闭浏览器再重新打开;会发现浏览器还是记住你的;
访问一般的网页服务器端还是知道你是谁,且能正常访问;
RememberMe 配置
spring-shiro.xml 配置:
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="sid"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="-1"/>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="rememberMe"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="2592000"/><!-- 30天 -->
</bean>
<!-- rememberMe管理器 -->`
<bean id="rememberMeManager"
class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cipherKey" value="#T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>
<property name="cookie" ref="rememberMeCookie"/>
</bean>
<!-- 安全管理器 -->`
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
……
<property name="rememberMeManager" ref="rememberMeManager"/>
</bean>
sessionIdCookie:maxAge=-1 表示浏览器关闭时失效此 Cookie;
rememberMeCookie:即记住我的 Cookie,保存时长 30 天;
rememberMe 管理器,cipherKey 是加密 rememberMe Cookie 的密钥;默认 AES 算法;
做完这些配置,我们可以选几种方式实现记住我,我这是用的是:
UsernamePasswordToken.setRememberMe(true);
subject.login(token);
当我们需要记住密码时,将其设定为true否则不设置。在登录以后cookie中会有记录,效果如下:
两张图片中的sid不同,但是rememberMe确实相同的