# 你好 Spring 安全

本节介绍了如何在 Spring 引导中使用 Spring 安全性的最小设置。

|   |可以找到已完成的应用程序[在我们的样品库中](https://github.com/spring-projects/spring-security-samples/tree/5.6.x/servlet/spring-boot/java/hello-security)。<br/>为了你的方便，你可以通过[点击这里](https://start.spring.io/starter.zip?type=maven-project&language=java&packaging=jar&jvmVersion=1.8&groupId=example&artifactId=hello-security&name=hello-security&description=Hello%20Security&packageName=example.hello-security&dependencies=web,security)下载一个最小的 Spring 引导+ Spring 安全应用程序。|
|---| |

## 更新依赖项

你需要做的唯一一步是通过使用[Maven](../getting-spring-security.html#getting-maven-boot)或[Gradle](../getting-spring-security.html#getting-gradle-boot)更新依赖关系。

## 启动Hello Spring 安全启动

现在，你可以通过使用 Maven 插件的`run`目标[run the Spring Boot application](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-running-with-the-maven-plugin)。下面的示例展示了如何这样做（以及这样做产生的输出的开始）：

例1.运行 Spring 启动应用程序

```
$ ./mvn spring-boot:run
...
INFO 23689 --- [  restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336

...
```

## Spring 引导自动配置

Spring 自动启动：

* 启用 Spring Security的默认配置，该配置将创建 Servlet `Filter`作为名为`springSecurityFilterChain`的 Bean。此 Bean 负责应用程序内的所有安全性（保护应用程序的URL、验证提交的用户名和密码、重定向到表单中的日志，等等）。

* 创建一个`UserDetailsService` Bean，其用户名为`user`，并随机生成一个登录到控制台的密码。

* 对于每个请求，用名为`springSecurityFilterChain`的 Bean 容器注册`Filter`。

Spring Boot的配置不是很多，但它做了很多。以下是这些特征的摘要：

* 与应用程序的任何交互都需要经过身份验证的用户。

* 为你生成默认的登录表单

* 让用户名为`user`且密码已登录到控制台的用户使用基于表单的身份验证进行身份验证（在前面的示例中，密码为`8e557245-73e2-4286-969a-ff57fe326336`）

* 使用bcrypt保护密码存储

* 让用户注销

* [CSRF攻击](https://en.wikipedia.org/wiki/Cross-site_request_forgery)预防

* [Session Fixation](https://en.wikipedia.org/wiki/Session_fixation)保护

* 安全报头集成

  * [HTTP严格的传输安全](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)用于安全请求

  * [X-Content-Type-Options](https://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).ASPX）积分

  * 缓存控制（可以稍后由应用程序重写，以允许缓存静态资源）

  * [X-XSS-保护](https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).ASPX）积分

  * x-frame-options集成，帮助防止[点击劫持](https://en.wikipedia.org/wiki/Clickjacking)

* 与以下 Servlet API方法集成：

  * [`HttpServletRequest#getRemoteUser()`]（https://DOCS.oracle.com/javaee/6/api/javax/ Servlet/http/httpservletrequest.html#getremoteuser（））

  * [`HttpServletRequest.html#getUserPrincipal()`]（https://DOCS.oracle.com/javaee/6/api/javax/ Servlet/http/httpservletrequest.html#getUserprincipal（））

  * [`HttpServletRequest.html#isUserInRole(java.lang.String)`]（https://DOCS.oracle.com/javaee/6/api/javax/ Servlet/http/httpservletrequest.html#isuserinrole（ Java.lang.string））

  * [`HttpServletRequest.html#login(java.lang.String, java.lang.String)`]（https://DOCS.oracle.com/javaee/6/api/javax/ Servlet/http/httpservletrequest.html#login（ Java.lang.string，%20java.lang.string））

  * [`HttpServletRequest.html#logout()`]（https://DOCS.oracle.com/javaee/6/api/javax/ Servlet/http/httpservletrequest.html#logout（））

[Servlet Applications](index.html)[建筑](architecture.html)

