# 你好 Spring 安全

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

可以找到已完成的应用程序在我们的样品库中 (opens new window)
为了你的方便,你可以通过点击这里 (opens new window)下载一个最小的 Spring 引导+ Spring 安全应用程序。

# 更新依赖项

你需要做的唯一一步是通过使用MavenGradle更新依赖关系。

# 启动Hello Spring 安全启动

现在,你可以通过使用 Maven 插件的run目标run the Spring Boot application (opens new window)。下面的示例展示了如何这样做(以及这样做产生的输出的开始):

例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攻击 (opens new window)预防

  • Session Fixation (opens new window)保护

  • 安全报头集成

    • HTTP严格的传输安全 (opens new window)用于安全请求

    • [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集成,帮助防止点击劫持 (opens new window)

  • 与以下 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建筑