1.spring security 初探
spring security主要是一套安全框架,是用于解决用户认证授权的功能,认证Authentication即表示对(用户/系统/设备)登录认证也就是说 认证是谁的问题?先认证之后再授权Authorization,授权即表示当前认证过的用户,能做什么?有那些访问资源的权限。
2.spring security demo
spring security能够和spring boot项目做很完美的兼容非常方便,需要在pom文件中引入jar包即可,直接运行就好
<dependencies>
<!-- spring security starter 必须 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- actuator 指标监控 非必须 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- spring mvc servlet web 必须 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
创建项目启动项运行会看到日志,默认账号为user 密码为控制打印出来,很明显这无法用于生产,应该账号密码是从数据库查询而来,而不是由spring security在内存中默认给我们生成一个。 细心的朋友可以发现,打印日志中可看出,密码是由UserDetailsServiceAutoConfiguration 配置类生成的,我们就从它开始顺藤摸瓜来一探究竟。
3.UserDetailsServiceAutoConfiguration
阅读源码可知,在内存中自定义了一个用户,也就是说如果我们需要用户必须先观察UserDetails
4.UserDetails
从上述源码可知从上面 UserDetailsService 可以知道最终交给Spring Security的是UserDetails 。该接口是提供用户信息的核心接口。该接口实现仅仅存储用户的信息。后续会将该接口提供的用户信息封装到认证对象Authentication中去。UserDetails 接口默认提供了:
- 用户的权限集, 默认需要添加ROLE_ 前缀
- 用户的加密后的密码, 不加密会使用{noop}前缀
- 应用内唯一的用户名
- 账户是否过期
- 账户是否锁定
- 凭证是否过期
- 用户是否可用
我们分别跟踪UserDetails接口查询看源码中默认的实现类会看到User类 该User类算是Spring security对用户的默认封装。
5.demo默认演示
上述启动了一个spring security demo 暂时不改变默认密码 直接访问http://localhost:8080/actuator/ 会发现被spring security 默认给拦截了页面就不贴了,需要输入user 和 控制台生成的密码才能继续访问到,F12会发现,登录之后的访问资源请求,会携带登录成功返回cookie 。
6.配置文件自定义用户名密码
因为spring security每次启动都会在内存中创建用户,我们如果想不用默认username password想自行配置,则需要用配置的账户密码来登录
7.关闭spring security功能
如果引入了jar包,但是想关闭功能,估计也没人这么做。这里提一下启动类中配置一个Class即可 @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
|