当前位置: 首页 > 知识库问答 >
问题:

由以下原因引起:java.lang.非法状态异常:发现 Web 安全配置器适配器以及安全筛选器链。请只选择一个

陈飞语
2023-03-14

我正在将Spring启动 2.5.12 升级到 2.7.2。根据给出的链接

@Configuration
@EnableWebSecurity
@Order(1)
public class BasicAuthC {
@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .requestMatchers().antMatchers("/api/anything"")
                .and()
                .authorizeRequests(requests -> requests.anyRequest().fullyAuthenticated())
                .httpBasic()
         return http.build();
    }

    @Bean
    public InMemoryUserDetailsManager memoryUserDetailsManager() {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();

        return  new InMemoryUserDetailsManager (User.withUsername("testUserName").password(encoder.encode("****")).
                authorities(new SimpleGrantedAuthority("SOME_ROLE")).build());

    }
}   


import com.azure.spring.aad.webapi.AADJwtBearerTokenAuthenticationConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.web.SecurityFilterChain;

@Order(2)
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
public class OAuthTwoConfiguration  {

    @Profile(value="OAUTHPROFILE")
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/test").permitAll()
                .and().authorizeRequests((requests) -> requests.anyRequest().authenticated())
                .oauth2ResourceServer()
                .jwt()
                .jwtAuthenticationConverter(new AADJwtBearerTokenAuthenticationConverter());
        return http.build();
    }

    @Profile(value = "test")
    @Bean
    public WebSecurityCustomizer WebSecurityCustomizer () throws Exception {

        return (web)->web.ignoring().antMatchers("/someAPI");
    }
}

原因:org.springframework.html" target="_blank">beans。BeanInstationException:未能实例化[javax.servlet.Filter]:工厂方法“springSecurityFilterChain”引发异常;嵌套异常是java.lang.IllegalStateException:找到了WebSecurity配置适配器以及SecurityFilterChain。请仅选择一个。在org.springframework.beans.factory.support.simpleinstantationstrategy.instantiate(simpleinstationstratigy.java:185)~[spring-beans-5.3.22.jar:5.2.22]和org.spring-frameworks.bean.factorysupport.ConstructorResolver.instantiate(ConstructorResolver.java:653)~[spring-beans-5.4.22Web安全配置适配器以及安全过滤器链。请仅选择一个。在org.springframework.util.Assert.state(Assert.java:76)~[spring-core-5.3.22.jar:5.2.22]在org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain(websecurity-configuration.java:106)~[spring-security-config-5.7.2.jar:5.7.2]在java.base/jdk.internal.reflect.NativeMethodAccessorImpl。在java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:na]在java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:na]位于java.base/java.lang.Refract.Method.invoke处(Method.java:566)~[na:na]org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstationStrategie.java:154)~[spring-beans-5.3.22.jar:5.3.22]…省略了22个公共框架

共有1个答案

南门棋
2023-03-14

您的代码或您使用的某些库仍在提供 Web 安全配置器适配器

再次检查你的代码,也许你忘记了一些地方。

尝试将您使用的库更新到最新版本。

如果它们尚未迁移,则可能需要等到迁移后再删除 Web安全配置器适配器

 类似资料:
  • 我正在尝试将spring-security-oauth添加到一个带有spring-security的现有应用程序中。我正在使用Java配置。 我有一个已修改的筛选器链(添加了一些自定义筛选器),但是对'/oauth/token'的请求没有使用它,而是使用了'default'筛选器链。如何访问保护oauthendpoint的筛选器链,以便也可以在那里使用自定义筛选器,或者将oauthendpoint

  • 是否有可能在实体上实现ApiResource安全性,以便没有实体id的GET请求(即集合操作)只返回与当前已验证用户匹配的项(或为此目的,必须针对每个实体检查的任何其他规则)? 我到目前为止的实现: 上面的代码适用于项操作,但不适用于集合运算符,即假设用户ID。%1(非管理员)已通过身份验证: get返回用户#1数据200 OK(根据需要) get返回403禁止(根据需要,用户1应该无法获取其他用

  • 我试图创建一个安全过滤器,以排除某些用户在ElasticSearch中看到某些文档。例如,如果一个文档包含“abc:123”和“abc:xyz”,那么用户的配置文件中必须同时包含这两个文档才能查看该文档。我们正在使用小胡子模板创建这个动态。我的第一次尝试是这样的: 但是,我很快意识到,这将允许拥有一个控件的用户查看具有多个控件的文档。文档必须具有用户必须匹配的控件的子集。因此,如果用户只有“abc

  • 我正试图在我的spring boot应用程序中使用KeyClope。 我想根据REST方法和用户角色限制对特定URL的访问。 在下面的示例中,具有或角色的用户可以执行GET,而具有或角色的用户可以执行POST、PUT或DELETE。 不幸的是,此配置允许任何经过身份验证的用户访问/api/日历URL。我做错了什么?

  • 警告:此版本的mysql2(0.2.18)与Rails 3.1不兼容,因为ActiveRecord适配器已拉入Rails本身。 警告:如果您打算在Rails中使用0.3.x(或更高版本),请使用它>=3.1.x rake aborted! 未定义方法`accept'for nil:nilclass 任务:TOP=>db:migrate (通过运行任务查看完整跟踪)** 希望有人能帮助我,谢谢。

  • Spring Boot执行器endpoint默认受基本http安全保护。 这个可以改成使用Spring Security吗?我已经成功地设置了Spring Security并使用它来保护我的其他页面。 我尝试了并在授权请求中添加了(注意,我使用了不同的url作为endpoint的根用户),但这没有帮助。我一直得到一个基本的http身份验证日志,它不是用户在AuthenticationManager