Sping Boot HttpSecurity fluent API顺序?

a11xaf1n  于 2023-03-23  发布在  Spring
关注(0)|答案(1)|浏览(102)
  • Spring 2.0.3.RELEASE*

目标:在除/actuator/health/actuator/info/ping(仅返回ResponseEntity.status(HttpStatus.NO_CONTENT).build()的自定义控制器)之外的所有端点上实施Sping Boot Security(入门级基本身份验证)。
下面给了我一个401。任何组合似乎要么让我完全匿名访问所有端点,要么让我完全匿名访问所有端点。
我已经在application.yml中设置了spring.security.user.name...password,它工作正常。
我已经实施了。。

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {

        super.configure(http);

        // just trying to get health working for starters
        http.authorizeRequests().antMatchers("/actuator/health").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().permitAll();
    }
}

下面的代码似乎仅限于Actuator的/health/info端点,但也打开了我的自定义/ping端点(不在此列表中)。

http.requestMatcher(EndpointRequest.to("health", "info"))
    .authorizeRequests().anyRequest().permitAll();
3bygqnnd

3bygqnnd1#

这个问题最终是Spring Tool Suite中的一个bug。在Gradle项目中使用Boot Dashboard并不总是能够获得构建输出。它似乎使用了不同的目录,我无法弄清楚。
最终对我有效的HttpSecurity配置是:

@Override
protected void configure(final HttpSecurity http) throws Exception {
    // @formatter:off
    http.
        authorizeRequests().
            antMatchers("/ping", "/actuator/health", "/actuator/info", "/login").permitAll().
            anyRequest().authenticated().and().
        httpBasic().and().
        // CSRF tokens for API access
        csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    // @formatter:on
}

相关问题