Spring+Shiro权限管理 (四) 为Shiro添加RememberMe(记住我)功能

废话少说,进入正题。

 

思路:

1、ApplicationContext.xml中,配置 CookieRememberMeManager (记住我的Cookie管理器);

2、CookieRememberMeManager需要Cookie,我们配置一个Shiro的Cookie实现类 SimpleCookie ;

3、把CookieRememberMeManager配置进Shiro的SecurityManager中。

4、在Subject.login()前,判断是否要记住我。

 

实现步骤:

1、ApplicationContext.xml中 (抽取了我配置文件中的主要部分)

   <bean name="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realms">
            <list>
                <ref bean="userRealm"/>
            </list>
        </property>

        <!--shiro session共享管理-->
        <property name="sessionManager" ref="sessionManager"/>
        <!--shiro 权限缓存管理-->
        <property name="cacheManager" ref="redisCacheManager"/>
        <!--shiro 记住我-->
        <property name="rememberMeManager" ref="rememberMeManager"/>
    </bean>

    <!-- Shiro 记住我(避免多次登录) -->
    <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
        <property name="cookie" ref="cookie"></property>
    </bean>
    <bean id="cookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg name="name" value="Shiro-RememberMe"></constructor-arg>
        <property name="maxAge" value="1296000"></property>
    </bean>

2、Controller中,登录认证那段

        UsernamePasswordToken token = new UsernamePasswordToken(userIdCode, password);
        //是否记住我
        token.setRememberMe(rememberMe);
        try {
            //当调用subject的登入方法时,会跳转到认证的方法上。
            subject.login(token);

        } catch......

3、前端界面新增CheckBox按钮

<form action="toHome" method="post">
    账号:<input name="userIdCode" type="text"/>${userName}
    <br/>
    密码:<input name="password" type="password"/>${password}
    <br/>
    15天内自动登录<input name="rememberMe" type="checkbox"/>
    <br/>
    <input type="submit" value="登录"/>
</form>

4、需要特别注意的一点:Shiro 拦截器链中,如果页面是authc的话,RememberMe是看不出效果的,所以我们要把需要(一次登录短暂时间内可以重复访问的页面)拦截器等级设为user。

    <!--shiro拦截器的bean-->
    <bean name="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>

        <!--设置登入页面-->
        <property name="loginUrl" value="/login"/>
        <!--设置登录成功的跳转页面-->
        <property name="successUrl" value="/toHome"/>
        <!--设置没有权限跳转的页面-->
        <property name="unauthorizedUrl" value="/unauthorized"/>

        <!--自定义拦截器-->
        <property name="filters">
            <map>
                <!--退出拦截器-->
                <entry key="logout" value-ref="logoutFilter"/>
            </map>
        </property>
        <!--拦截器链,顺序执行-->
        <property name="filterChainDefinitions">
            <value>
                /login = anon <!--登录界面不拦截-->
                /toHome = anon
                /toHome2 = user
                /longpoll = anon
                /druid/** = anon
                /logout = logout<!--退出-->
                /admin = roles[admin]
                /toAddUser = perms[add]
                /** = user<!-- 登录成功过 -->
                <!--/** = authc&lt;!&ndash;必须登录认证成功才能访问&ndash;&gt;-->
            </value>
        </property>

    </bean>

至此,就好了。

 

总结:

个人觉得,出于安全性考虑,建议不用,或少用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值