带Spring安全的SpringBoot 2执行器

vom3gejh  于 12个月前  发布在  Spring
关注(0)|答案(3)|浏览(99)

如何使用Spring Security来保护执行器端点,但不干扰任何其他应用程序URL?我们应用程序中的安全机制由不同的框架处理,因此我希望默认禁用Spring Security,仅对/actuator/端点启用。
为了实现这一点,我在初始化类中添加了以下内容。

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

字符串
这样,Spring Security默认配置就被禁用了。在此之后,我需要做哪些更改来为执行器端点配置安全性?

mo49yndu

mo49yndu1#

您可以使用下面的代码和配置
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()
            ;
    }

}

pxyaymoc

pxyaymoc2#

执行器不再有单独的上下文。
假设是,只要非执行器端点不需要安全限制,以下配置就可以工作。

@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有更多粒度选项;此外,在Sping Boot 2中,默认情况下仅启用infohealth
或者,您可以只保护其他API使用的任何安全机制后面的路径
我在这里推了一个示例应用程序,
https://github.com/DarrenForsythe/secure-spring-actuator-only

y1aodyip

y1aodyip3#

其工作

package com.example.demo.config;

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.WebSecurityConfigurerAdapter;

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).authenticated().anyRequest().permitAll().and()
                .httpBasic()
        ;
    }
}

字符串

相关问题