Springsecurity改造Shiro项目踩坑

在将后台管理端从SpringBoot升级到SpringCloud的过程中,遇到SpringSecurity鉴权未生效的问题。原本使用Shiro进行鉴权,现改为SpringSecurity。发现所有接口可以直接访问,SS鉴权未起作用。经调试发现,问题在于请求路径未被SS配置覆盖。通过添加`.antMatchers(/sys/**).authenticated()`,将管理员服务纳入SS权限管理,解决了问题。

为了快速开发,借助一套快速框架做了后台管理端。由于我采取的鉴权是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的权限管控范围。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值