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

3.4 KiB
Raw Blame History

27. 安全

如果Spring Security在classpath下那么web应用默认对所有的HTTP路径也称为终点端点表示API的具体网址使用'basic'认证。为了给web应用添加方法级别的保护你可以添加@EnableGlobalMethodSecurity并使用想要的设置。其他信息参考Spring Security Reference

默认的AuthenticationManager有一个单一的user'user'的用户名和随机密码会在应用启动时以INFO日志级别打印出来。如下

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

:如果你对日志配置进行微调,确保org.springframework.boot.autoconfigure.security类别能记录INFO信息否则默认的密码不会被打印。

你可以通过提供security.user.password改变默认的密码。这些和其他有用的属性通过SecurityProperties以security为前缀的属性被外部化了。

默认的安全配置security configuration是在SecurityAutoConfiguration和导入的类中实现的SpringBootWebSecurityConfiguration用于web安全AuthenticationManagerConfiguration用于与非web应用也相关的认证配置。你可以添加一个@EnableWebSecurity bean来彻底关掉Spring Boot的默认配置。为了对它进行自定义你需要使用外部的属性配置和WebSecurityConfigurerAdapter类型的beans比如添加基于表单的登陆。在Spring Boot示例里有一些安全相关的应用可以带你体验常见的用例。

在一个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。