2015-02-10 15:57:34 +00:00
|
|
|
|
### 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。
|