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