我尝试使用Actuator支持配置Spring Boot应用程序(1.2.3,但这也失败了1.2.4.BUILD-SNAPSHOT版本)。我想使用Actuator安全配置来控制对管理端点的访问,以及我们自己对应用程序其余部分的身份验证。
这是我的安全配置:
@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
{
@Autowired
private CustomAuthenticationProvider customAuthProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.authenticationProvider(customAuthProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.regexMatchers(API_DOC_REGEX).permitAll()
.regexMatchers(String.format(PATH_REGEX, PUBLIC_ACCESS)).permitAll()
.regexMatchers(String.format(PATH_REGEX, INTERNAL_ACCESS)).access("isAuthenticated() && authentication.hasOrigin('INTERNAL')")
.regexMatchers(String.format(PATH_REGEX, EXTERNAL_AUTHENTICATED_ACCESS)).authenticated()
.antMatchers("/**").denyAll()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
.and()
.addFilterAfter(customAuthProcessingFilter(), BasicAuthenticationFilter.class)
.csrf().disable();
}
}
当我没有设置管理端口时,这可以正常工作,但是当我设置管理端口时,管理URL会返回401响应。如果我注释掉.antMatchers("/**").denyAll()
行,那么一切都会完成,而根本不需要身份验证。因此,当我设置自定义端口时,看起来它正在使用我的应用程序的安全配置用于Actuator端点,但我不确定原因。
如何在自定义端口上运行时使用它自己的安全性?
答案 0 :(得分:1)
扩展来自@M. Deinum的评论,为管理内容添加另一个适配器(即使它已经有一个)似乎已修复它。这是我最终的课程:
@Order(0)
@Configuration
public class ManagementSecurityConfig extends WebSecurityConfigurerAdapter
{
@Autowired
ManagementServerProperties managementProperties;
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.requestMatchers()
.requestMatchers(new RequestMatcher()
{
@Override
public boolean matches(HttpServletRequest request)
{
return managementProperties.getContextPath().equals(request.getContextPath());
}
})
.and()
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}