具有Spring Security的SpringBoot 2执行器

时间:2018-11-13 20:30:26

标签: spring spring-boot spring-security

如何利用Spring Security保护执行器端点,但又不干扰任何其他应用程序URL?我们的应用程序中的安全性机制由其他框架处理,因此我想默认禁用Spring Security,并且仅对/actuator/端点启用。

为此,我在初始化类中添加了以下内容。

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

因此,Spring Security的默认配置被禁用。之后,我需要进行哪些更改才能为执行器端点配置安全性?

2 个答案:

答案 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中,默认情况下仅启用infohealth

或者您可以保护用于其他API的任何安全机制背后的路径

我在这里推送了一个示例应用程序

https://github.com/DarrenForsythe/secure-spring-actuator-only