在很多网站都有在登录的时候,比如说记住我 几天之内 只要再此打开这个网站,都不需要再登录的情况:
1、前台JSP增加 单选框:记住我 如
2、在处理登录的 Controller 代码中增加接收这个参数的变量如下图
默认情况下是 0 只有前台页面选中的时候,传过来 1
当 Controller 判断 isRememberMe 为 1 的时候,用户进行了记住我的动作,那么需要增加 token.setRememberMe(true); 操作
3、在shiro的配置文件中增加如下cookie配置:
1 <!-- 记住密码Cookie --> 2 <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> 3 <constructor-arg value="rememberMe"/> 4 <!-- 7天,采用spring el表达式来计算,方便修改 --> 5 <property name="maxAge" value="#{7 * 24 * 60 * 60}"/> 6 <!-- <property name="domain" value=".yzixi.com"/> --> 7 </bean> 8 9 <!-- rememberMe管理器,cipherKey生成见{@code Base64Test.java} --> 10 <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> 11 <property name="cookie" ref="rememberMeCookie"/> 12 </bean>
4、在 安全管理器 的 securityManager 中增加变量 rememberMeManager 配置,注意下面标红的属性
1 <!-- 1、安全管理器 --> 2 <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 3 <property name="realm" ref="shiroDbRealm"></property> 4 <!-- 设置缓存管理器为 ehcache --> 5 <property name="cacheManager" ref="shiroEhcacheManager"></property> 6 <!-- 配置sessionManager,提供session管理 --> 7 <property name="sessionManager" ref="sessionManager"></property> 8 <!-- 配置记住我 --> 9 <property name="rememberMeManager" ref="rememberMeManager"></property> 10 </bean>
5、同时需要修改shiro 的过滤器的权限认证级别 注意下面的标红属性权限级别
由原来的
1 <property name="filterChainDefinitions"> 2 <value> 3 <!-- 4 anon 不需要认证 5 authc 需要认证 6 user 验证通过或RememberMe登录的都可以 7 --> 8 <!-- 系统中的静态资源需要放行--> 9 /static/** = anon 10 <!-- 系统中登录验证码需要放行--> 11 /captcha.action = anon 12 <!-- 系统中登录动作需要放行--> 13 /login.action = anon 14 <!-- 系统中注册动作需要放行--> 15 /regist.action = anon 16 <!-- 系统中的所有资源、行为都需要认证--> 17 /** = authc 18 </value> 19 </property>
修改为:
1 <property name="filterChainDefinitions"> 2 <value> 3 <!-- 4 anon 不需要认证 5 authc 需要认证 6 user 验证通过或RememberMe登录的都可以 7 --> 8 <!-- 系统中的静态资源需要放行--> 9 /static/** = anon 10 <!-- 系统中登录验证码需要放行--> 11 /captcha.action = anon 12 <!-- 系统中登录动作需要放行--> 13 /login.action = anon 14 <!-- 系统中注册动作需要放行--> 15 /regist.action = anon 16 <!-- 系统中的所有资源、行为都需要认证--> 17 /** = user 18 </value> 19 </property>
经过以上的开发,那么就完成 记住我的 功能。
题外话:假如 访问的网站存在二级域名、三级域名,那么需要增加一个配置:
域的配置 :
增加 domain的配置 并指定值 修改为: