在我的Spring Boot项目中,我获得了以下SecurityFilterChain的定义:

public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  http

    // public routes
    .authorizeHttpRequests()
    .requestMatchers("/", "/favicon.ico", "/v3/api-docs*")
    .permitAll()
    .and()

    // enable security for the log-view
    .authorizeHttpRequests()
    .requestMatchers("/log")
    .hasAnyRole(ROLE_LOGVIEWER)
    .and()

    // enable security for the health check
    .authorizeHttpRequests()
    .requestMatchers("/manage/health")
    .hasAnyRole(ROLE_HEALTH)
    .and()

    // enable basic-auth and ROLE_USER for all other routes
    .authorizeHttpRequests()
    .anyRequest()
    .hasAnyRole(ROLE_USER)
    .and()
    .httpBasic();

  return http.build();
}

它在几个模型测试中进行了测试,并在生产环境中按预期运行.

但是在从Spring-Boot 3.0.8迁移到3.0.9之后,我得到了以下错误:

Factory method 'filterChain' threw exception with message: This method cannot decide whether these patterns are Spring MVC patterns or not. If this endpoint is a Spring MVC endpoint, please use requestMatchers(MvcRequestMatcher); otherwise, please use requestMatchers(AntPathRequestMatcher).

我试着使用更具体的需求匹配器,但没有成功.

对我有什么提示吗?

推荐答案

在使用Spring Security 6.1.2的非常基本的配置中,我遇到了同样的异常.我用以下方法解决了这个问题:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http.
            authorizeHttpRequests(requests -> {
                    requests.requestMatchers(new AntPathRequestMatcher("/"), new AntPathRequestMatcher("/style.css")).permitAll();
                    requests.requestMatchers(new AntPathRequestMatcher("/secure/**")).hasAuthority("MyAuthority");
            }).

我不确定这是否是正确的做法,但它似乎确实奏效了.在Spring Security6中,AbstractRequestMatcherRegistry不再有.antMatchers()方法.同样,我不确定这是否是最好的方法,也不完全确定我为什么要使用ANT匹配器和MVC端点匹配器.

Java相关问答推荐

是否有一种格式模式,可以在除0之外的数字前面有正负符号?

JPackaged应用程序启动MSI调试,然后启动System. exit()

如何在Java中声明未使用的变量?

路径映射未发生

在模拟超类中设置非setter属性的值

确定Java中Math.Ranb()输出的上限

将不受支持的时区UT重写为UTC是否节省?

在springboot 3中,当我调用api endpoint时,会出现404

具有阻塞方法的开源库是否应该为执行提供异步选项?

垃圾回收器是否真的删除超出作用域的对象?

一对多关系和ID生成

try 在两个不同数组的数字之间求平均值

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

控制器建议异常处理

为什么Spring要更改Java版本配置以及如何正确设置?

将@Transactional添加到Spring框架中链下的每个方法会产生什么效果?

Java 21保护模式的穷尽性

如何在 Android Studio 中删除 ImageView 和屏幕/父级边缘之间的额外空间?