为什么在ValidateCodeFilter中, SecurityProperties 不需要加@Autowire?

来源:4-8 图片验证码重构

大番薯93

2017-11-08

而在 BrowserSecurityConfig 中却加了@Autowire。

下面是BrowserSecurityConfig.java 的部分代码:

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private SecurityProperties securityProperties;

    @Autowired
    private AuthenticationSuccessHandler browserAuthenticationSuccessHandler;

    @Autowired
    private AuthenticationFailureHandler browserAuthenticationFailurehandler;


    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        ValidationCodeFilter validationCodeFilter = new ValidationCodeFilter();
        validationCodeFilter.setAuthenticationFailureHandler(browserAuthenticationFailurehandler);
        validationCodeFilter.setSecurityProperties(securityProperties);
        validationCodeFilter.afterPropertiesSet();

下面是ValidateCodeFilter.java的部分代码:

@Getter
@Setter
@NoArgsConstructor
@Slf4j
public class ValidationCodeFilter extends OncePerRequestFilter implements InitializingBean {

    @Autowired
    private AuthenticationFailureHandler authenticationFailureHandler;

    private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();

    private Set<String> urls = new HashSet<>();


    private SecurityProperties securityProperties;

    private AntPathMatcher pathMatcher = new AntPathMatcher();

    @Override
    public void afterPropertiesSet() throws ServletException {
        super.afterPropertiesSet();
        String[] configUrls = StringUtils.splitByWholeSeparatorPreserveAllTokens(securityProperties.getValidationCode().getImage().getUrl(),",");

        for(String configUrl : configUrls){
            urls.add(configUrl);
        }
        urls.add("/authentication/form");
    }

谢谢老师!

写回答

1回答

JoJo

2017-11-09

因为这时ValidateCodeFilter并没有定义为spring的bean,它是手工实例化然后手工设置的相关属性(如图中红框的部分),所以没有@Autowired

//img.mukewang.com/szimg/5a03f3e40001c45515960998.jpg

1
1
Boomkeeper
我也想问这个问题,最近正好学到这里,这里为什么不写成bean注入的方式,而使用手动实例化然后再set,是有什么考虑或讲究?还是后期会重构,只是我没学到?
2018-04-11
共1条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程