spring_reference/IV. Spring Boot features/27. Security.md

31 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### 27. 安全
如果Spring Security在classpath下那么web应用默认对所有的HTTP路径也称为终点端点表示API的具体网址使用'basic'认证。为了给web应用添加方法级别的保护你可以添加@EnableGlobalMethodSecurity并使用想要的设置。其他信息参考[Spring Security Reference](http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle#jc-method)。
默认的AuthenticationManager有一个单一的user'user'的用户名和随机密码会在应用启动时以INFO日志级别打印出来。如下
```java
Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
```
**注**:如果你对日志配置进行微调,确保`org.springframework.boot.autoconfigure.security`类别能记录INFO信息否则默认的密码不会被打印。
你可以通过提供`security.user.password`改变默认的密码。这些和其他有用的属性通过[SecurityProperties](http://github.com/spring-projects/spring-boot/tree/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java)以security为前缀的属性被外部化了。
默认的安全配置security configuration是在SecurityAutoConfiguration和导入的类中实现的SpringBootWebSecurityConfiguration用于web安全AuthenticationManagerConfiguration用于与非web应用也相关的认证配置。你可以添加一个@EnableWebSecurity bean来彻底关掉Spring Boot的默认配置。为了对它进行自定义你需要使用外部的属性配置和WebSecurityConfigurerAdapter类型的beans比如添加基于表单的登陆。在[Spring Boot示例](http://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/)里有一些安全相关的应用可以带你体验常见的用例。
在一个web应用中你能得到的基本特性如下
1. 一个使用内存存储的AuthenticationManager bean和唯一的user查看SecurityProperties.User获取user的属性
2. 忽略(不保护)常见的静态资源路径(`/css/**, /js/**, /images/**`和 `**/favicon.ico`)。
3. 对其他的路径实施HTTP Basic安全保护。
4. 安全相关的事件会发布到Spring的ApplicationEventPublisher成功和失败的认证拒绝访问
5. Spring Security提供的常见底层特性HSTS, XSS, CSRF, 缓存)默认都被开启。
上述所有特性都能打开和关闭或使用外部的配置进行修改security.*。为了覆盖访问规则access rules而不改变其他自动配置的特性你可以添加一个使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)注解的WebSecurityConfigurerAdapter类型的@Bean。
如果Actuator也在使用你会发现
1. 即使应用路径不受保护,被管理的路径也会受到保护。
2. 安全相关的事件被转换为AuditEvents审计事件并发布给AuditService。
3. 默认的用户有ADMIN和USER的角色。
使用外部属性能够修改Actuator执行器的安全特性management.security.*。为了覆盖应用程序的访问规则你可以添加一个WebSecurityConfigurerAdapter类型的@Bean。同时如果不想覆盖执行器的访问规则你可以使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)注解该bean否则使用@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)注解该bean。