您当前的位置: 首页 > 

Charge8

暂无认证

  • 1浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Shiro 实现记住我功能

Charge8 发布时间:2019-04-27 10:59:58 ,浏览量:1

登录一些网站的时候,在登录输入框的下侧一般都会有一个“记住我”的勾选框,选择之后,下次进入网站时就会自动进行登录操作,无需我们再次输入密码。

 

有关“记住我”的实现原理如下:

1、首先在登录页面选中“记住我”然后登录成功;如果是浏览器登录,一般会把“记住我”的Cookie写到客户端并保存下来。

2、关闭浏览器再重新打开,会发现浏览器还是记住你的。

3、访问一般的网页服务器端还是知道你是谁,且能正常访问。

Shiro提供了登录时的“认证”操作,同时也提供了“记住我”的操作实现,有何区别?

1)subject.isAuthenticated()

        表示用户进行了身份验证登录的,即使用Subject.login进行了登录;

2)subject.isRemembered()

        表示用户是通过“记住我”登录的,此时可能并不是真正的你(如其他人使用你的电脑,或者你的cookie被窃取)在访问的;

两者二选一,即subject.isAuthenticated()==true,则subject.isRemembered()==false;反之一样。

 

一、演示 记住我 功能

1、登录页面:

	
		用户名:
		密    码:
		 记住我7天
		登录
	

2、action 登录方法:token.setRememberMe(true);

	@PostMapping("/login")
	public String login(User user, HttpSession session, Integer rememberme) {
		//使用 shiro 登录验证
		//1 认证的核心组件:获取 Subject 对象
		Subject subject = SecurityUtils.getSubject();
				
		//2 将登陆表单封装成 token 对象
		UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPazzword());
		//开启记住我功能
		if(rememberme != null && rememberme == 1) {
			token.setRememberMe(true);
		}
		try {
			//3 让 shiro 框架进行登录验证:
			subject.login(token);
		} catch (Exception e) {
			e.printStackTrace();
			return "loginError";
		}
		return "redirect:/admin/index";
	}

3、在 spring.xml 里的配置 shiro 的核心组件bean中配置 cookie 失效时间

	
	
		
         
         
        
        
        	
        		
        		
        		
        	
        
        
        
            

    跟踪一下 rememberMeManager 属性:

     

      

       

4、运行项目登录访问即可:

注意:

1)要实现记住我功能,必须将管理的model对象实现可序列化(implements Serializable)。

2)在athc过滤配置之前,能够通过记住我访问的页面要配置user过滤器。

    

 

end ~

 

 

 

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0384s