Actuator Spring Boot 的安全配置

问题描述 投票:0回答:2

最近我将 Spring Boot 版本从 2.5.2 更新到 3.1.5 ,之前我有这个安全配置

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
            .requestMatcher(EndpointRequest.to("health"))
            .authorizeHttpRequests(request-> request.anyRequest().permitAll());

        return http.build();
    }

此配置将要求对执行器端点进行身份验证,“/health”除外 但是新版本的Spring Boot不支持这个配置,所以我改成了这样

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
                .authorizeHttpRequests(request->
                    request.requestMatchers(EndpointRequest.to(HealthEndpoint.class)).permitAll()
                           .anyRequest().permitAll()
                );

        return http.build();
    }

但这不起作用,因为我在尝试访问“/health”时仍然看到登录表单

我尝试将 HealthEndpoint.class 替换为 “health”,但也没有帮助。

也许我的配置写错了,或者Spring有Actuator端点的自动配置。

spring-boot spring-security spring-boot-actuator
2个回答
1
投票

根据 documentation 所有

actuator
端点默认放置在
/actuator
路径下。路径并基于它你必须重写
securityFilterChain

不用当前的一个实现,只需编写下一个类似的内容:

@Bean
  public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
            .authorizeHttpRequests(request->
                request.requestMatchers("/actuator/**").permitAll()
                    .anyRequest().permitAll()
            );
    
        return http.build();
      }

也不要忘记在

application.yml
文件中声明下一个配置:

management:
 endpoints:
   web:
     exposure:
       include: "health,info"

它将解决您的问题。


0
投票

如果您无法找出问题所在,我可以通过从我的

spring.mvc.servlet.path=
文件中删除
application.properties
来解决该问题。显然,从 Spring Boot 3.1.6 开始,Spring Security 不再忽略 servlet 路径。我想您也可以重写匹配器以包含 servlet 路径,但我还没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.