# 1.Spring Security

## 基本入门

添加依赖

```java
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
```

基本配置用户名密码

```java
security.user.name = admin
security.user.password = 123456
```

以上配置完成后，针对 是所有 访问进行用户密码验证，实际开发中需要进行不同的url进行权限访问控制。

## 原理

Spring Security 就是一组过滤器组成的链,这组过滤器链放置在REST API前面，所有调用REST API的请求和响应都要经过这组Spring Security 过滤器链，过滤链的顺序是固定的。

![](https://3562539340-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT314x6hQ7gJbPKxx%2F-LfnTB6gvTwJcyb-RbKo%2F-LfnTKNpw4Y1TOZ8qw43%2F1.1.png?generation=1558862987090487\&alt=media)

![](https://3562539340-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT314x6hQ7gJbPKxx%2F-LfnTB6gvTwJcyb-RbKo%2F-LfnTKNrTJODvsmFlthh%2F1.2.png?generation=1558862986910844\&alt=media)

**用户认证授权**

深绿色的方块与图一深绿色的方块对应，进行用户认证授权，认证授权完放入Authentication

**获取认证授权后的信息**

蓝色方块是保存和获取用户认证信息这个机制相关的一一些类和接口，也就是图1中的REST API内部我们可以使用这些类和接口来获取认证登录后的用户信息

* Authentication  用来保存用户认证信息的，比如认证时的用户名密码，认证以后获得的当前用户信息
* SecurityContent 安全上下文，包含着Authentication 这个对象
* SecurityContextHolderStagegy
* SecurityContextHolder

示例

```java
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // 获取当前登录用户的信息
System.out.println(authentication);
if(authentication != null) {
    System.out.println(authentication.getPrincipal()); // 当前认证后的信息
}
```

## 资料

[Spring Security 参考手册](https://springcloud.cc/spring-security-zhcn.html)
