shiro学习笔记十四:shiro使用记住我

一、项目说明

项目环境:jdk1.7+tomcat7+idea2018+maven+shiro1.3.2

源代码github地址:https://github.com/tmAlj/shiro/tree/master/ssms

实现目标:记住我的功能在一般系统都用的比较多,通过选择记住我,关闭浏览器后,再次访问之前的页面可以不用在登录。本节通过简单实例实现记住我的功能

综合实例:基于shiro的按钮级别的权限管理系统

二、实现记住我

        注:本节所有实例基于shiro学习笔记十三:shiro权限动态加载

(1)在登录新增记住我复选框

<div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
        <div class="checkbox">
            <label>
                <input type="checkbox" name="remember" class="remember">请记住我
            </label>
        </div>
    </div>
</div>

(2)在contoller中获取复选框的值

        注:主要是通过UsernamePasswordToken对象的setRememberMe方法实现记住我功能

String remember = request.getParameter("remember");

// 开启记住我的功能,这里可以通过获取用户的提交的信息,判断是否选择记住我来决定开启或关闭
try{
    if(remember.equals("on")){
        token.setRememberMe(true);
    }
}catch (NullPointerException e){
    token.setRememberMe(false);
}

(3)配置记住我的时间有效期

        注:在spring-shiro-config.xml文件中给securityManager对象配置一个最大有效期属性即可

<!-- 配置shiro的核心securityManager -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	<property name="cacheManager" ref="cacheManager"/>
	<!--<property name="sessionMode" value="native"/>-->
<!--	<property name="realm" ref="jdbcRealm"/>-->
<!--	<property name="realm" ref="encrRealm"/>-->
<!--	<property name="realm" ref="saltRealm"/>-->
	<!-- 认证规则匹配器 -->
	<property name="authenticator" ref="authenticator"></property>
	<!-- 配置多Realm -->
<!--	<property name="realms">
			<list>
				<ref bean="md5Realm"/>
				<ref bean="sha1Realm"/>
			</list>
	   </property>-->
	<!-- 权限认证Realm -->
	<property name="realm" ref="authRealm"/>

	<!-- 配置记住我的时长 -->
	<property name="rememberMeManager.cookie.maxAge" value="60"></property>
</bean>

(4)配置记住我过滤器

        注:配置过滤器user即表示可以是通过认证或记住我访问该资源,这里welcom.jsp页面是可以通过记住我访问的,user.jsp和admin.jsp则只能是认证后才能访问

package com.wsd.base;

import java.util.LinkedHashMap;

/**
 * Created by tm on 2018/8/19.
 * 拦截器工厂类,用于构造拦截集合
 */
public class FilterChainDefinitionMapBuilder {
    public LinkedHashMap<String, String> buildFilterChainDefinitionMap() {
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
        // TODO 从数据库去获取,与配置文件中一致
        map.put("/statics/**", "anon");
        map.put("/login.jsp", "anon");
        map.put("/welcom.jsp", "user");
        map.put("/logout", "logout");
        map.put("/user.jsp", "authc,roles[user]");
        map.put("/admin.jsp", "authc,roles[admin]");
        return map;
    }
}

三、测试示例

    说明:这里如果选择了记住我后登录成功,在关闭浏览器后,再次打开浏览器,访问welcom.jsp是可以不需要登录的,但是选择进入user和admin是会提示登录的;如果在开始没有选择记住我登录成功,在关闭浏览器后,再次打开浏览器,访问welcom.jsp是需要登录的;同时也可以验证记住我的有限期,在到达有效期后再次访问页面是需要再次登录的。 

(1)登录/login.jsp

4b83171ba06bd73198fc0eac76e0b392fa9.jpg

转载于:https://my.oschina.net/tij/blog/1930415

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值