前言
之前做的客户信息管理系统太简陋了,就先写了一个交差(小公司的好处:想怎么写就怎么写),现在有时间了也看了一些分布式的教学视频,就想着用spring cloud重构一遍,完善下,也能看看是不是把cloud了解了
1.为什么选择使用Security
看了网上一些对比Security和Shiro的文章,大概理解就是Security相对重量级,功能更多,项目如果是基于Spring开发的,兼容会更好,毕竟属于半练习嘛,老板也没有时间要求,个人觉得用明白Security其他的大概也能了解了
2.踩坑!
决定用Security做鉴权了就在网上看文字的教程和视频教程,了解了Security运行的流程后决定将它放在gateway里所有的请求都过一遍验证,然后按照各个教程中的思路写完发现:编译正常、运行无错误,但是不起作用。
鼓捣好久才知道由于 SpringCloud Gateway 基于WebFlux 并且不兼容SpringMVC,因此对于Security的配置方式也跟普通SpringBoot项目中的配置方式不同。
在Gateway项目中使用的WebFlux,是不能和Spring-Web混合使用的!!!配置方式要换成 WebFlux的方式
当时只看了spring boot中使用Security的教程觉得理解思路就行了,还是太大意了
“自定义认证”、“自定义鉴权”、“登陆成功、失败“等注入的组件,全部要换为WebFlux版本对应的
3.实现思路
3.1.登录校验流程
3.2具体实现
首先实现ReactiveUserDetailsService接口,重写findByUsername方法,改成自己的去数据库读用户名密码
@Service
public class UserService implements ReactiveUserDetailsService {
@Autowired
YuangongMapper yuangongMapper;
@Override
public Mono<UserDetails> findByUsername(String username) {
return Mono.just(queryDbUser(username));
}
p