大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫。目前正在出一个 SpringBoot 长期系列教程,从入门到进阶, 篇幅会较多~
「大佬可以绕过 ~」
如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了 Springboot 基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础 中间件 的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有 收获 ~
上期带大家学习了 Shiro 中如何进行权限认证,本期将带大家学习 Shiro 中如何进行 缓存和会话管理 ,最后我们将做一个在线用户管理以及强制下线用户的功能,同样的,我们集成到 Springboot 中。
首先我们要明白使用缓存的原因,为啥要用它 还记得之前带大家实现的 用户认证 和 权限认证 吗,那里我使用了 MockUser ,真实场景中是要去数据查询的,这样一来就会产生耗时,请求多的时候数据库肯定忙不过来了,所以我们需要使用缓存来提高程序响应速度
缓存使用 Redis ,下面就带大家整一下:
修改 ShiroConfig ,添加方法
这样就可以了,大家可以把测试获取用户的地方改成数据库获取,看下 控制台 sql日志会明显减少,因为有一部分是从缓存拿的
这部分功能还是比较好玩的,学完可以自由发挥做一个房间功能,可以加入可以踢人,下面我们就开整
修改 ShiroConfig ,添加方法,因为我们使用的是 Redis 缓存
实现 SessionListener
最后同样的,想要开启需要我们注入到 Manager 中:
我们先定义一个类,用来记录在线用户:
那么怎么获取呢?我们定义一个方法,大家实践中可以抽到 Service 层,这里方便演示,我直接写到控制器里
如果你看谁不爽,可以直接让他下线,hhh~
是不是很简单,这里就不演示了,大家自行试试
本期内容就到这里结束了,总结一下,本节主要讲了 Shiro 如何进行缓存以及如何进行用户会话管理,大家可以举一反三,做一些小功能尝试尝试
下期给大家讲讲 Shiro 中如何整合 JWT ,这个大家应该不陌生,如果不知道啥是 JWT 也没关系,我会带大家一步一步入门,下期也是 Shiro 系列的终极篇,内容可能有点多,耐心看完哦。欢迎加群一起学习交流 ~
所以我们需要修改配置,使服务允许访问我们的CAS服务器,如下:
修改完成之后,访问 >
DefaultFilter
shiro中提供的默认filter
FilterChainManager
通过配置创建对应的filterChain
Shiro通过此配置可初始化FilterChainManager中的filterChain,结构为 url ->filter列表
SpringShiroFilter
入口filter,拦截所有请求,通过请求的url匹配到对应的filterChain,然后通过Chain对请求进行,认证或者授权的处理
OncePerRequestFilter
OncePerRequestFilter 用于防止多次执行 Filter;也就是说一次请求只会走一次拦截器链;
另外提供 enabled 属性,表示是否开启该拦截器实例
实现了 doFilter 方法,提供了抽象方法 doFilterInternal 。
在doFilter中验证当前的Filter有没有执行过,如果已经执行过一次或者当前filter被禁用,则直接执行下一个Filter。如果没有执行过则执行 doFilterInternal 方法
AbstractShiroFilter
创建Subject,绑定subject到当前线程,根据url获取filterChain并执行filterChain
PathMatchingFilterChainResolver
通过请求的url来匹配FilterChainManager中的FilterChain,这个方法会返回一个 ProxiedFilterChain
ProxiedFilterChain
存储了tomcat的Filter 和shiro内部的filter
shiro内部的过滤器执行完后会切换到tomcat的过滤器继续执行
默认filter
除了LogoutFilter,其他都继承了AdviceFilter
AdviceFilter
AdviceFilter 提供了 AOP 风格的支持,类似于 SpringMVC 中的 Interceptor:
权限验证在preHandle中实现
PathMatchingFilter
PathMatchingFilter 提供了基于 Ant 风格的请求路径匹配功能及拦截器参数解析的功能,如
“ /admin roles[admin,user] ”自动根据 “,” 分割,解析成 /admin -> [admin,user] 存入 appliedPaths 中
实现了 preHandle 方法,通过请求的url匹配url对应的权限,解析权限串 调用子类的 onPreHandle 对权限进行处理
AnonymousFilter
提供匿名访问功能,实现了 onPreHandle 直接返回true,所以配置 anon 的url任何人都可以访问
AccessControlFilter
提供了资源访问控制的基础功能
实现了 onPreHandle ,这里拆分出了
isAccessAllowed (是否允许访问)和 onAccessDenied (访问被拒绝时)这两个方法供子类实现
AuthenticationFilter
实现了 isAccessAllowed 方法,验证用户是否已经登录,没有登录将被拒绝
FormAuthenticationFilter
继承自 AuthenticationFilter 只有用户登录过后才能通过
实现了 onAccessDenied 方法,如果请求的地址是登录地址,这里会尝试自动登录,否则跳转到登录页面
Basic> 以上就是关于SpringBoot进阶之整合Shiro实现缓存和会话管理全部的内容,包括:SpringBoot进阶之整合Shiro实现缓存和会话管理、Shiro单点登录之集成CAS、Shiro中的filter等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力! 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)