十、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>

(二)用户对象添加rememberMe属性,接收前端参数

private boolean rememberMe;
public boolean isRememberMe() {
        return rememberMe;
    }

    public void setRememberMe(boolean rememberMe) {
        this.rememberMe = rememberMe;
    }

(三)验证登录处,添加该属性

@PostMapping(value = "/sublogin", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String login(User user){
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
        try {
            //接收前端的记住我
            token.setRememberMe(user.isRememberMe());

            subject.login(token);
        } catch (AuthenticationException e) {
            return e.getMessage();
        }
        return "登陆成功";
    }

(四)前端增加个单选框,name属性设置为rememberMe

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/82632504