Spring Boot 2.0安全配置

0

升级2.0以后一些配置需要修改,下面是一些安全方面的配置:

#安全配置
#management.security.enabled=true
#配置用户
#spring.security.user.name=user
#spring.security.user.password=user
#spring.security.user.roles=USER
#manager端口
management.server.port=9999
#manager权限角色
#management.security.roles=ADMIN
#manager的上下文
management.server.servlet.context-path=/admin
#公开端点
management.endpoints.web.exposure.include=*
#隐藏端点
management.endpoints.web.exposure.exclude=env

添加用户和角色:

  • 配置USER角色,包含一个用户名为user,密码为user的用户。
  • 配置ADMIN角色,包含一个用户名为admin,密码为admin的用户。
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
    InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    manager.createUser(User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build());
    manager.createUser(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("ADMIN").build());
    return manager;
}

权限配置:

  • info端点无需要权限即可访问
  • mappings端点禁止访问
  • 其他端点需要使用ADMIN角色权限
  • /anime需要使用用户权限访问

除了上面的其他接口都可以被访问,配置如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
	http.authorizeRequests()
		.requestMatchers(EndpointRequest.to("info")).permitAll() // 允许
		.requestMatchers(EndpointRequest.to("mappings")).denyAll() // 禁止
		.requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ADMIN") // ADMIN权限
		.antMatchers("/anime").hasRole("USER") // USER权限
//		.requestMatchers(EndpointRequest.toAnyEndpoint()).denyAll()
		.antMatchers("/**").permitAll() // 允许
		.and().httpBasic(); // HTTP Basic验证
//		.and().formLogin(); // 表单登陆
}

如果设置了management.server.servlet.context-path=/admin时,antMatchers匹配端点是不需要加/admin的。

EndpointRequest.to配置端点时,只需要写info就可以了,不需要写全路径:/actuator/info

重点问题

如果系统存在异步通知,最好检查通知地址,否者容易出现内网直接发送请求跨过防火墙。

官方参考文档:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Security-2.0
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide