Mar*_*ged 2 spring-security spring-boot spring-restcontroller spring-boot-actuator
我将已经存在的应用程序从Spring Boot 1.3更新到2.0.1.该应用程序使用Actuator并公开REST风格的API.
在Boot 1.3中,无需身份验证即可使用API,并且执行器端点配置为受密码保护:
security.user.name=foo
security.user.password=bar
security-user.role=ADMIN
Run Code Online (Sandbox Code Playgroud)
我更新了这个,如配置更改日志中记录的那样,并将条目重命名为security.user.nameto spring.security.user.name和like .
但是当我尝试使用curl我的API时,我被拒绝了,因为我没有提供凭据:

在Spring博客中,我找到了一个可能的解决方案,如何在详细级别配置Spring Security:
http
.authorizeRequests()
// 1
.requestMatchers(EndpointRequest.to("status", "info"))
.permitAll()
// 2
.requestMatchers(EndpointRequest.toAnyEndpoint())
.hasRole("ACTUATOR")
// 3
.requestMatchers(StaticResourceRequest.toCommonLocations())
.permitAll()
// 4
.antMatchers("/**")
.hasRole("USER")
.and()
...
Run Code Online (Sandbox Code Playgroud)
但这比我需要的更细粒度,我正在寻找一个application.properties基础的解决方案.
有没有办法解决这个没有额外的代码?
设置spring.security.user.name和时spring.security.user.password,您正在spring-security为整个应用程序(包括Actuator端点)配置表单登录.
不幸的是,在Spring Boot 2.0中,您无法使用属性设置不同的用户名/密码或禁用Actuator端点的身份验证.这意味着您必须通过安全配置明确允许执行器端点.
通过spring-security,您还可以允许公共访问您的端点,并且非常容易地需要执行器端点的凭据:
@Configuration
public class BasicSecurityConfig extends WebSecurityConfigurerAdapter {
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/actuator/**").hasRole("ACTUATOR")
.anyRequest().permitAll();
}
}
Run Code Online (Sandbox Code Playgroud)
(我以为你使用的是WebMvc,而不是WebFlux,这有点不同)
确认您在以下位置中包含以下内容application.properties:
spring.security.user.name=user
spring.security.user.password=pass
spring.security.user.roles=ACTUATOR,USER # and others, if you like
management.endpoint.health.roles=ACTUATOR
Run Code Online (Sandbox Code Playgroud)
请参阅此处,了解Spring 1.x与2.0中Actuator的差异之间的快速而精彩的解释.
| 归档时间: |
|
| 查看次数: |
2634 次 |
| 最近记录: |