你好 Spring Security
本节介绍了如何把 Spring Security 与 Spring Boot 结合使用的最小设置。
完整的本示例程序可以在 spring-security-samples/servlet/spring-boot/java/hello-security at 5.7.x · spring-projects/spring-security-samples · GitHub 仓库中找到。
为了方便您的使用和测试,你可以 单击这里
下载 zip 的版本直接解压后运行。
更新依赖
针对已经下载下来的版本,唯一需要做的就是更新 Maven 或者 Gradle 依赖。
启动 Hello Spring Security Boot 应用
现在,你可以使用 Maven 的插件 run
运行 Spring Boot 应用。
下面的代码显示了使用这个插件如何启动这个应用(以及执行本操作的控制台输出):
$ ./mvn spring-boot:run
...
INFO 23689 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336
?> 有关这个项目的运行,请参考页面:启动 Hello Spring Security Boot 应用 中的内容。
Spring Boot 自动配置
Spring Boot 自动配置:
- 在 Spring Boot 中启用 Spring Security 的默认配置。这个配置将会创建一个 servlet
Filter
(过滤器),这个 Bean 被命名为springSecurityFilterChain
。
这个 Bean 将会在你的应用中负责所有的安全策略,包括但不限于,保护应用 URLs,对提交的用户名和密码进行校验,重定向登录表单等)。 - 创建一个名为
UserDetailsService
的 bean,使用的用户名为user
,同时对这个用户生成一个随机的密码,并将这个密码输出到控制台中。 - 针对每个请求都会调用的一个被命名为
springSecurityFilterChain
的 Bean 到 Servlet 容器的Filter
中。
Spring Boot 并没有配置很多,但是却做了很多。
主要的一些特性如下:
- 对所有需要使用的系统用户先进行授权
- 为你创建一个默认的登录表单
- 让用户可以使用
user
用户名和在控制台中打印的密码进行登录(在这个示例中,密码为8e557245-73e2-4286-969a-ff57fe326336
) - 使用 BCrypt 算法对存储的密码进行保护
- 让用户可以注销登录
- 阻止 CSRF 攻击
- 固定会话(Session Fixation) 保护
- Header 的安全整合
- 针对安全请求,使用HTTP Strict Transport Security
- 集成X-Content-Type-Options
- 缓存控制(可以在你的应用程序中对这个进行重写,以允许缓存你的静态资源)
- 集成X-XSS-Protection
- 集成 X-Frame-Options 来防止点击劫持 [Clickjacking](help prevent Clickjacking - Wikipedia)
- 集成以下的 Servlet API 方法