原创

Shiro之记住我功能的实现

首先在配置文件中加入

<!--配置securityManager,注意在Spring中使用的是DefaultWebSecurityManager,在非web环境下,使用DefaultSecurityManager--> 
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
    <!--配置数据源--> 
    <property name="realm" ref="realm"/> 
    <!--配置Shiro的SessionManager对象--> 
    <property name="sessionManager" ref="sessionManager"/> 
    <!--配置自定义的Redis缓存管理对象--> <property name="cacheManager" ref="redisCacheManager"/>
    <!--配置记住我管理对象--> <property name="rememberMeManager" ref="rememberMeManager"/> 
</bean> 
<!--记住我管理器--> 
<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cookie" ref="cookie"/>
</bean> <bean id="cookie" class="org.apache.shiro.web.servlet.SimpleCookie"> 
    <!--前端传过来记住我的属性名--> 
    <constructor-arg value="rememberMe"/> 
    <!--登录过期时间--> 
    <property name="maxAge" value="2000000"/> 
</bean>

拦截器器修改拦截用户类型

/**=user

在controller层中, token中添加记住我

Subject subject = ShiroUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password,rememberMe);
subject.login(token);

前端增加个单选框,name属性设置为rememberMe
`注意:一定要将这个用户实体进行序列化如

public class User implements Serializable {
    //TODO 
}

注意:
如果你想在测试是不是记住我进来的,可以先在登陆,勾选记住我,然后关闭浏览器,在访问,不用登陆就可访问说明是记住我进来。 此外记住我的功能不安全,因此建议在项目中不要使用,一定要使用,就要细化权限。一些敏感操作,可以让用户重新登陆才能进行操作。

正文到此结束(点击广告是对作者最大的支持)