如何利用Spring Security保护执行器端点,但又不干扰任何其他应用程序URL?我们的应用程序中的安全性机制由其他框架处理,因此我想默认禁用Spring Security,并且仅对/actuator/
端点启用。
为此,我在初始化类中添加了以下内容。
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
因此,Spring Security的默认配置被禁用。之后,我需要进行哪些更改才能为执行器端点配置安全性?
答案 0 :(得分:1)
您可以使用以下代码和配置
application.properties
spring.security.user.name=user
spring.security.user.password=password
spring.security.user.roles=ENDPOINT_ADMIN
保护执行器端点
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @author dpoddar
*
*/
@Configuration
@EnableWebSecurity
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "flyway","info")).permitAll()
.requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ENDPOINT_ADMIN")
.and()
.httpBasic()
;
}
}
答案 1 :(得分:0)
执行器不再有单独的上下文。
假设是,只要非执行器端点不需要任何安全限制,以下配置就会起作用。
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).authenticated().anyRequest().permitAll()
.and().formLogin();
}
}
EndpointRequest
处理与任何Actuator
端点匹配的事件,出于测试目的而给出了表单登录名。请注意,甚至/info
和/health
都是安全的。 EndpointRequest
具有更多的粒度选项;此外,在Spring Boot 2中,默认情况下仅启用info
和health
。
或者您可以保护用于其他API的任何安全机制背后的路径
我在这里推送了一个示例应用程序
https://github.com/DarrenForsythe/secure-spring-actuator-only