如何在自定义WebAuthenticationDetails中使用自定义ConfigurationProperties?

时间:2017-08-09 13:33:48

标签: java spring spring-boot

在Spring 4.3.x中,我有一个自定义类,称之为扩展WebAuthenticationDetails的MyWebAuthenticationDetails。我需要使用application.properties中定义的该类中的属性。我通过名为AuthenticationProperties的自定义类获取这些属性,该类使用@ConfigurationProperties。通常我会在类构造函数的AuthenticationProperties中自动装配,但这对于MyWebAuthenticationDetails是不可能的。如何从我的WebAuthenticationDetails扩展中访问属性?

1 个答案:

答案 0 :(得分:0)

由于您的MyWebAuthenticationDetails自定义详细信息对象将通过AuthenticationDetailsSource bean(您应该已经声明)构建,因此您可以作为注入的bean访问AuthenticationProperties,因此您将拥有您可以访问所有属性。

一个简单的 Java 配置模板如下(请注意,这不是一个完整的功能配置,只是为了突出显示重要的配置条目):

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authenticationDetailsSource(myAuthenticationDetailsSource())/* and all the missiong HTTP configuration*/;
    }

    @Bean
    private AuthenticationDetailsSource<HttpServletRequest, MyWebAuthenticationDetails> myAuthenticationDetailsSource() {
        return new MyAuthenticationDetailsSource<HttpServletRequest, MyWebAuthenticationDetails>();
    }

    private final class MyAuthenticationDetailsSource extends AuthenticationDetailsSourceImpl<HttpServletRequest, MyWebAuthenticationDetails> {

        @Autowired
        private AuthenticationProperties authenticationProperties;

        @Override
        public MyWebAuthenticationDetails buildDetails(HttpServletRequest request) {
            return new MyWebAuthenticationDetails(request, this.authenticationProperties);
        }
    }
}