首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'org.springframework.security.oauth2.jwt.JwtDecoder‘OAuth2 v5 : NoSuchBeanDefinitionException: Spring

'org.springframework.security.oauth2.jwt.JwtDecoder‘OAuth2 v5 : NoSuchBeanDefinitionException: Spring
EN

Stack Overflow用户
提问于 2021-08-09 13:41:18
回答 1查看 79关注 0票数 1

我有一个SpringBoot应用程序,我正试图将它从旧的Spring Security OAuth 2.x库更新到新的Spring Security 5.5.x。最初,我的配置类使用@EnableResourceServer注释,但根据迁移指南,这被Spring Security DSL oauth2ResourceServer方法所取代。

我已经添加了一个自定义的JWT身份验证转换器,但现在在启动时收到以下警告:

09:30:51.591 [, , ] [main] WARN %->5level org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.oauth2.jwt.JwtDecoder' available

我还不能看到这个JwtDecoder在过滤器链中的什么位置使用,但是它阻止了我的应用程序启动。

代码语言:javascript
运行
复制
@Configuration
@Order(OAuthTokenApiSecurityConfig.ORDER)
public class OAuthTokenApiSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final HttpSecurity http) throws Exception { // NOPMD

        // @formatter:off
        http
            .requestMatcher(new OAuth2RequestMatcher())
            ...
            ...
            .oauth2ResourceServer()
            .jwt()
            .jwtAuthenticationConverter(customTokenAuthenticationConverter());
        // @formatter:on
    }

    @Bean
    public CustomTokenAuthenticationConverter customTokenAuthenticationConverter() {
        return new CustomTokenAuthenticationConverter();
    }

    @Bean
    public JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter() {
        return new JwtGrantedAuthoritiesConverter();
    }
}
代码语言:javascript
运行
复制
dependecies {
    api("org.springframework.security:spring-security-oauth2-resource-server")
    api("org.springframework.security:spring-security-oauth2-core")
    api("org.springframework.security:spring-security-oauth2-jose")
    api("com.nimbusds:nimbus-jose-jwt")
}
代码语言:javascript
运行
复制
springBootVersion=2.5.3
springSecurity=5.5.1

是否有一些我遗漏的依赖项,或者是否有一些配置或其他东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 14:01:43

在Jwt配置中使用JwtDecoder来根据公钥解码和验证传入的令牌。

有多种方法可以构建通过JwtDecoders类中的一些工厂方法提供的bean。

具体来说,

JwtDecoders.fromIssuerUri(...)JwtDecoders.fromOidcIssuerUri(...),我相信现在有第三种方法可以直接指向一个键。

解码器本身可以在jwt配置的decoder方法上显式设置,如果您想/需要手动构建解码器,例如想要向JwtDecoder添加更多验证。

如果您阅读OAuth2ResourceServerConfigurer的javadoc,还可以选择通过jwkSetUri方法设置Jwk set URI,这也将构建一个解码器。

使用JwtDecoder的确切位置在最终将从BearerTokenAuthenticationFilter调用的JwtAuthenticationProvider

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68713080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档