package com.xd.pre.modules.security.code.sms; import com.xd.pre.modules.security.UserDetailsServiceImpl; import com.xd.pre.modules.security.handle.PreAuthenticationFailureHandler; import com.xd.pre.modules.security.handle.PreAuthenticationSuccessHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.DefaultSecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.stereotype.Component; /** * @Classname SmsCodeAuthenticationSecurityConfig * @Description TODO * @Author Created by Lihaodong (alias:小东啊) [email protected] * @Date 2019-07-08 12:08 * @Version 1.0 */ @Component public class SmsCodeAuthenticationSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> { @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired private PreAuthenticationFailureHandler preAuthenticationFailureHandler; @Autowired private PreAuthenticationSuccessHandler preAuthenticationSuccessHandler; @Override public void configure(HttpSecurity http) throws Exception { super.configure(http); //自定义SmsCodeAuthenticationFilter过滤器 SmsCodeAuthenticationFilter smsCodeAuthenticationFilter = new SmsCodeAuthenticationFilter(); smsCodeAuthenticationFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class)); smsCodeAuthenticationFilter.setAuthenticationSuccessHandler(preAuthenticationSuccessHandler); smsCodeAuthenticationFilter.setAuthenticationFailureHandler(preAuthenticationFailureHandler); //设置自定义SmsCodeAuthenticationProvider的认证器userDetailsService SmsCodeAuthenticationProvider smsCodeAuthenticationProvider = new SmsCodeAuthenticationProvider(); smsCodeAuthenticationProvider.setUserDetailService(userDetailsService); //在UsernamePasswordAuthenticationFilter过滤前执行 http.authenticationProvider(smsCodeAuthenticationProvider).addFilterAfter(smsCodeAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); } }