记录一下自己的spring security学习之路
最近开始准备一套权限框架,考虑到成熟度的问题,准备在已有的成熟框架上进行开发,考虑过shiro和spring security,最后选中了spring security,接下来就开始从0学习spring security。
spring security的前世今生
Spring Security 最早不叫 Spring Security ,而是叫 Acegi Security。
Acegi Security 基于 Spring,可以帮助我们为项目建立丰富的角色与权限管理,但是最广为人诟病的则是它臃肿繁琐的配置,这一问题最终也遗传给了 Spring Security。
直到spring boot出现让配置变得轻松,spring security开始被大量使用。
核心功能
对于一个权限管理框架来说, 最核心的功能一般就两个方面:
- 认证
- 授权
认证也就是登陆验证,授权也就是是否能查看资源的权限
开始学习搭建一个基于spring boot, spring security, webflux的程序
首先,新建一个spring boot项目, 引入maven如下


创建项目后,添加一个测试接口

然后启动项目,访问默认8080端口


发现需要登陆,说明spring security已经接管项目中的接口
用用户名为 user 密码为启动时打印的字符串登陆


登陆成功并拿到接口返回数据
比较好奇这个默认的登陆名和密码是怎么来的,我们接下来走源码中去看一下

可以看到,登陆的密码是从这个地方生成的
根据此方法往上继续查看可以看到,security自动配置了一个reactiveUserDeatilsService,并且生成了密码

然后根据生成UserDetails的方法发现,用户是在SecurityProperties文件中

接下来再进入该文件
就会发现,默认的用户名和密码

该文件的前缀

根据这个我们可以实现在配置类中自己配置登陆的用户名和密码。
这种情况只能有一个用户名和密码,比较适合单一账号的场景,比如在使用eureka作为注册中心时,可以使用这种方式,让各个服务使用同一的账号登陆,防止其他没有账户的服务注册到你的注册中心。

接下来重启服务 访问测试接口并登陆


这样一个简单配置的spring security就完成了