为了快速开发,借助一套快速框架做了后台管理端。由于我采取的鉴权是SpringSecurity(下称SS),而快速框架用的是Shiro,所以要对原本的Shiro框架进行舍弃,统一使用SS。
问题:
在统一鉴权方式的时候遇到了一个坑,特此记录。由于原本的管理端采用的只是单纯的springboot,以此为admin服务搭建了一套springcloud项目,另有一个自己搭建的app服务。在调试的过程中发现,app服务比较好的集成了jwt+SS鉴权,在不带token的情况下,直接访问app的接口会报错。

但是在把admin服务引入springcloud框架以后,第一步先把原来的Shiro权限访问代码全部注释。按理来说是要全部走SS鉴权的,但在之后在访问的过程中,发现admin的所有接口都可以被外部直接访问到,SS鉴权一直没有生效。
最后把admin服务的所有config配置都关了,发现依然如此。
经过逐行调试源代码,发现在AbstractSecurityInterceptor类有一个方法
beforeInvocation(Object object)中通过
Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource().getAttributes(object);
obtainSecurityMetadataSource()来获取SS的配置文件:

这些配置文件返回一个集合,如果请求的路径不在这个集合中,那么即使有SS也是可以无限制访问后台的;如果在集合中,则会根据集合的配置来判断这个请求是否有访问权限。
由于admin工程的管理端后台是以sys/**来做的根路径没有被SS的配置包含进去,所以导致SS鉴权一直不成功。经过修改加入了
.antMatchers("/sys/**").authenticated()
之后,便把admin服务正式的纳入了SS的权限管控范围。
在将后台管理端从SpringBoot升级到SpringCloud的过程中,遇到SpringSecurity鉴权未生效的问题。原本使用Shiro进行鉴权,现改为SpringSecurity。发现所有接口可以直接访问,SS鉴权未起作用。经调试发现,问题在于请求路径未被SS配置覆盖。通过添加`.antMatchers(/sys/**).authenticated()`,将管理员服务纳入SS权限管理,解决了问题。
1011

被折叠的 条评论
为什么被折叠?



