SpringBoot + Shiro (四)缓存&记住密码

SpringBoot + Shiro (四)缓存&记住密码,第1张

最终demo

到这节为止,我们已经实现了身份验证和权限验证。但是,如果我们登录之后多次访问 http://localhost:8080/userInfo/userDel 的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些我们提供给shiro一次就够了。

下面,我们开始给shiro添加缓存支持:

在 com.example.demo.config.Shiro.ShiroConfiguration 中添加以下方法

将缓存对象注入到 SecurityManager 中:

在src/main/resouces/config中添加ehcache-shiro.xml配置文件:

启动项目,再多次访问 http://localhost:8080/userInfo/userDel ,这时候只会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。

---------------------下面我们开始配置记住密码-----------

将rememberMeManager注入到SecurityManager中

在 ShiroFilterFactoryBean 中添加记住我过滤器 user ,添加 user 过滤器的资源在记住我或认证之后就可以直接访问了。

最后,在login.html页面添加记住我单选框

启动项目,正常登录后关闭浏览器,再打开浏览器输入 http://localhost:8080/index ,这时候就可以直接访问index页面,不需要再登录了。

SpringBoot + Shiro (一)基础工程搭建

SpringBoot + Shiro (二)身份校验和角色设置

SpringBoot + Shiro (三)权限

SpringBoot + Shiro (四)缓存&记住密码

SpringBoot + Shiro (五)验证码

最后,感谢几位作者的文章解惑:

springboot整合shiro-登录认证和权限管理

Spring Boot Shiro权限管理【从零开始学Spring Boot】

Spring boot 中使用Shiro

最后帮朋友打个小广告

一个有趣的迷你小程序

随着社会的发展,现在前端展示的方式多样,由原本网页单一形式,到现在的网页、小程序、Android、IOS等多元化模式。由于前端展示的多元化,原有采用session有状态的认证方式已经无法满足需求,所以需要调整后台的技术框架,让系统能满足有状态认证和无状态token认证并存。

后台的管理系统是采用码云上开源的renren-security系统,该系统采用的认证框架是Shiro。考虑系统采用原本的权限控制采用Session方式,整体风险大且时间周期长,所以整合考虑采用SessionId作为token的方式,进行无状态的token认证方式。

登录时,POST用户名与密码到/login进行登入,如果成功返回一个会话ID,以会话ID作为token,失败的话直接返回401错误。之后用户访问每一个需要权限的网址请求必须在header中添加Authorization字段,例如Authorization: token,token为密钥。后台会进行token的校验,如果有误会直接返回401。

在login方法验证通过后,以SessionId作为token,通过json返回客户端。

重写Sessionmanager的getSessionId方法,获取token作为SessionId,同时修改request的“REFERENCED_SESSION_ID”为token,因为token为验证通过的sessionId,所以此request也会采用验证通过的Session进行获取验证和权限。

新建一个Maven工程,添加相关的依赖。

编写认证方法和授权方法。

重写继承DefaultWebSessionManager的SessionManager,修改getSessionId方法,通过获取的token作为SessionId。

配置Realm和SessionManager,还有关于路径的拦截等配置。

整体配置可以参考: https://blog.csdn.net/qq_34996727/article/details/81133729

SessionManager可以参考: https://blog.csdn.net/u011456867/article/details/80484559

由于web应用启动的顺序顺序的原因(listener->filter->servlet),在Filter中注入Bean是不会成功的。

网上由很多的实现方式来实现在Filter中注入Bean,这里,我换一种方式,给Filter添加一个构造方法,在初始化Filter的时候把Bean实例传入,这里以Shiro中的拦截remmeberMe的Filter为例:

然后,在 Shiro 的配置文件中初始化 AddPrincipalToSessionFilter :

最后帮朋友打个小广告

一个有趣的迷你小程序


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11336606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存