`
Ydoing
  • 浏览: 100550 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Web中rememberMe 功能(shiro的实现)

 
阅读更多

记住我(RememberMe)的功能

Shiro 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:
- 1、首先在登录页面选中RememberMe 然后登录成功;如果是浏览器登录,一般会把RememberMe的Cookie 写到客户端并保存下来;
- 2、关闭浏览器再重新打开;会发现浏览器还是记住你的;
- 3、访问一般的网页服务器端还是知道你是谁,且能正常访问;
- 4、但是比如我们访问淘宝时,如果要查看我的订单或进行支付时,此时还是需要再进行身份认证的,以确保当前用户还是你.

配置基于Form表单的身份验证过滤器

    <bean id="formAuthenticationFilter" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
        <property name="usernameParam" value="username" />
        <property name="passwordParam" value="password" />
        <property name="rememberMeParam" value="rememberMe" />
        <property name="loginUrl" value="/api/user/login" />
    </bean> 

拦截器配置

/** = user

使用shiro默认的user拦截器。该拦截器要求用户已经登录或者勾选了RememberMe,就可以放行。

前端

这里写图片描述

shiro设置rememberMe

用firefox浏览器可以看出,shiro在返回响应的时候,首先删除了之前的rememberMe的cookie,然后重新在客户端设置了rememberMe的cookie。

这里写图片描述

cookie详细信息,shiro默认设置有效期为1年
这里写图片描述

用户再次访问时,浏览器会发送这个rememberMe的cookie给服务端,无需再登录即可访问
这里写图片描述

其他说明

源码托管在https://github.com/Jdoing/myweb
参考http://jinnianshilongnian.iteye.com/blog/2031823

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics