① 记住我
Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器,下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:
② 认证
subject.isAuthenticated() 表示用户进行了身份验证登录的,即使用Subject.login进行了登录。
subject.isRemembered()表示用户是通过记住我登录的,此时可能并不是真正的你(如你的朋友使用你的电脑,或者你的cookie 被窃取)在访问的。
③ 建议
访问一般网页:如个人在主页之类的,我们使用user 拦截器即可,user 拦截器只要用户登录(isRemembered() || isAuthenticated()
)过即可访问成功。
访问特殊网页:如我的订单,提交订单页面,我们使用authc拦截器即可,authc拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)
登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。
如果要自己做RememeberMe,代码实例如下:
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
token.setRememberMe(true);
XML配置如下:
你可能需要在登录页面添加一个记住我复选框,根据该复选框的状态在后台判断是否设置token.setRememberMe(true);
。
Shiro完整配置与项目地址:GitHub-Shiro下载。
在前后端分离的项目中,ajax跨域和保存用户信息是其中的重点和难点。
如果在后台使用shiro框架来进行权限控制,就需要用到cookie+session的模式来保存用户的信息。
具体参考博文:https://blog.csdn.net/palerock/article/details/73457415