华为内部顶级Spring Security全解笔记,认证授权一键搞定

最近几天在改造项目,需要将gateway整合security在一起进行认证和鉴权,之前gateway和auth是两个服务,auth是shiro写的一个,一个filter和一个配置,内容很简单,生成token,验证token,没有其他的安全检查,然后让对项目进行重构。

先是要整合gateway和shiro,然而因为gateway是webflux,而shiro-spring是webmvc,所以没搞成功,如果有做过并成功的,请告诉我如何进行整合,非常感谢。

那整合security呢,因为spring cloud gateway基于webflux,所以网上很多教程是用不了的,webflux的配置会有一些变化,具体看如下代码示例:

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

上面的示例代码,是我开源项目中的一段,一般的配置就如上面写的,就可以使用了,但是由于我们之前的项目中的是shiro,然后有一个自定义的加密解密的逻辑。

首先说明一下情况,之前那一套加密(前端MD5,不加盐,然后数据库存储的是加盐后的数据和对应的盐(每个账号一个),要登录比较之前对密码要获取动态的盐,然后加盐进行MD5,再进行对比,但是在配置的时候是没法获取某一用户的盐值)

所以上面的一版配置是没法通过验证的,必须在验证之前,给请求的密码混合该账号对应的盐进行二次加密后在对比,但是这里就有问题了:

  1. security 框架提供的几个加密\解密工具没有MD5的方式;
  2. security 配置加密\解密方式的时候,无法填入动态的账号的加密盐;

对于第一个问题还好处理,解决方式是:自定义加密\解密方式,然后注入到配置类中,示例如下:

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

第二个问题的解决办法,找了很多资料,也没有找到,后来查看security的源码发现,可以在UserDetailsService接口的findByUsername()方法中,在返回UserDetails实现的时候,使用默认实现User的UserBuilder内部类来解决这个问题,因为UserBuilder类中有一个属性,passwordEncoder属性,它是Fucntion<String, String>类型的,默认实现是 password -> password,即对密码不做任何处理,先看下它的源码:

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

再看下解决问题之前的findByUsername()方法:

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

那找到了问题的解决方法,就来改代码了,如下所示:

新增一个代码处理方法

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

然后添加builder链

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

然后跑一下代码,请求登录接口,就登陆成功了。

超全!华为内部顶级Spring Security全解笔记,认证授权一键搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值