【问题标题】:Modifying the OAuth2ClientAuthenticationProcessingFilter in Spring Boot在 Spring Boot 中修改 OAuth2ClientAuthenticationProcessingFilter
【发布时间】:2016-06-07 15:52:50
【问题描述】:

我想修改由 Spring Boot 1.3.2 中的@EnableOAuth2Sso 配置创建的OAuth2ClientAuthenticationProcessingFilter。据我所知,OAuth2ClientAuthenticationProcessingFilter 类是在内部构造的,没有任何应用程序上下文连接。有没有办法做到这一点?

【问题讨论】:

    标签: spring spring-security spring-boot spring-security-oauth2


    【解决方案1】:

    不确定这是不是最好的方法,但您可以使用 BeanPostProcessor 来做到这一点:

    public static class DefaultRolesPrefixPostProcessor implements BeanPostProcessor, PriorityOrdered {
    
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                if (bean instanceof FilterChainProxy) {
    
                    FilterChainProxy chains = (FilterChainProxy) bean;
    
                    for (SecurityFilterChain chain : chains.getFilterChains()) {
                        for (Filter filter : chain.getFilters()) {
                            if (filter instanceof OAuth2ClientAuthenticationProcessingFilter) {
                                OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationProcessingFilter = (OAuth2ClientAuthenticationProcessingFilter) filter;
                                oAuth2ClientAuthenticationProcessingFilter
                                        .setAuthenticationSuccessHandler(authenticationSuccessHandler());
                            }
                        }
                    }
                }
                return bean;
            }
        }
    

    【讨论】:

    • 您将如何准确地包含DefaultRolesPrefixPostProcessor?我尝试制作@Bean public DefaultRolesPrefixPostProcessor defaultRolesPrefixPostProcessor() { },但在启动时出现以下异常。 IllegalStateException: ObjectPostProcessor is a required bean. Ensure you have used @EnableWebSecurity and @Configuration
    • 我们在“@Configuration”注释类之一中有一个静态 bean 方法来创建它,因为需要在任何其他 bean 之前创建后处理器:@Bean public static DefaultRolesPrefixPostProcessor defaultRolesPrefixPostProcessor () { return new DefaultRolesPrefixPostProcessor(); }
    猜你喜欢
    • 2018-02-18
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多