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在内存中默认给我们生成一个。

springsecurity删除accesstoken spring security userdetails_web安全


细心的朋友可以发现,打印日志中可看出,密码是由UserDetailsServiceAutoConfiguration 配置类生成的,我们就从它开始顺藤摸瓜来一探究竟。

3.UserDetailsServiceAutoConfiguration

阅读源码可知,在内存中自定义了一个用户,也就是说如果我们需要用户必须先观察UserDetails

springsecurity删除accesstoken spring security userdetails_用户名_02

4.UserDetails

springsecurity删除accesstoken spring security userdetails_用户名_03


从上述源码可知从上面

UserDetailsService 可以知道最终交给Spring Security的是UserDetails 。该接口是提供用户信息的核心接口。该接口实现仅仅存储用户的信息。后续会将该接口提供的用户信息封装到认证对象Authentication中去。UserDetails 接口默认提供了:

  • 用户的权限集, 默认需要添加ROLE_ 前缀
  • 用户的加密后的密码, 不加密会使用{noop}前缀
  • 应用内唯一的用户名
  • 账户是否过期
  • 账户是否锁定
  • 凭证是否过期
  • 用户是否可用

我们分别跟踪UserDetails接口查询看源码中默认的实现类会看到User类

springsecurity删除accesstoken spring security userdetails_用户名_04


该User类算是Spring security对用户的默认封装。

5.demo默认演示

上述启动了一个spring security demo 暂时不改变默认密码 直接访问http://localhost:8080/actuator/
会发现被spring security 默认给拦截了页面就不贴了,需要输入user 和 控制台生成的密码才能继续访问到,F12会发现,登录之后的访问资源请求,会携带登录成功返回cookie 。

6.配置文件自定义用户名密码

因为spring security每次启动都会在内存中创建用户,我们如果想不用默认username password想自行配置,则需要用配置的账户密码来登录

springsecurity删除accesstoken spring security userdetails_spring_05

7.关闭spring security功能

如果引入了jar包,但是想关闭功能,估计也没人这么做。这里提一下启动类中配置一个Class即可
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)