shiro 实现 网站登录记住我功能 学习记录(四)

在很多网站都有在登录的时候,比如说记住我 几天之内  只要再此打开这个网站,都不需要再登录的情况:

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的配置 并指定值 修改为:

原文地址:https://www.cnblogs.com/yinfengjiujian/p/9084307.html