22
33import org .springframework .beans .factory .annotation .Autowired ;
44import org .springframework .context .annotation .Bean ;
5- import org .springframework .security . authentication . AccountExpiredException ;
5+ import org .springframework .context . annotation . Configuration ;
66import org .springframework .security .authentication .AuthenticationManager ;
7- import org .springframework .security .authentication .BadCredentialsException ;
8- import org .springframework .security .authentication .LockedException ;
97import org .springframework .security .config .annotation .authentication .builders .AuthenticationManagerBuilder ;
108import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
119import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
1210import org .springframework .security .config .annotation .web .configuration .WebSecurityConfigurerAdapter ;
13- import org .springframework .security .core .userdetails .UsernameNotFoundException ;
1411import org .springframework .security .crypto .password .NoOpPasswordEncoder ;
1512import org .springframework .security .crypto .password .PasswordEncoder ;
1613import org .springframework .security .web .authentication .AuthenticationFailureHandler ;
1714import org .springframework .security .web .authentication .AuthenticationSuccessHandler ;
18- import org .springframework .security .web .authentication .ExceptionMappingAuthenticationFailureHandler ;
1915import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
2016import org .springframework .security .web .authentication .logout .LogoutSuccessHandler ;
2117import org .springframework .web .cors .CorsConfiguration ;
2218import org .springframework .web .cors .CorsConfigurationSource ;
2319import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
2420import top .whgojp .common .config .AuthIgnoreConfig ;
2521import top .whgojp .common .constant .SysConstant ;
22+ import top .whgojp .common .filter .ValidateCodeFilter ;
2623import top .whgojp .common .push .service .EmailPush ;
2724import top .whgojp .security .detail .CustomUserDetailsService ;
2825import top .whgojp .security .handler .CustomLogoutSuccessHandler ;
2926import top .whgojp .security .handler .CustomSavedRequestAwareAuthenticationSuccessHandler ;
3027import top .whgojp .security .handler .CustomSimpleUrlAuthenticationFailureHandler ;
31- import top .whgojp .common .enums .LoginError ;
3228
33- import java .util .HashMap ;
3429import java .util .List ;
35- import java .util .Map ;
3630
31+ @ Configuration
3732@ EnableWebSecurity
3833public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
3934
4035 @ Autowired
4136 private AuthIgnoreConfig authIgnoreConfig ;
37+ @ Autowired
38+ private ValidateCodeFilter validateCodeFilter ;
4239
4340 @ Autowired
4441 private CustomUserDetailsService customUserDetailsService ;
@@ -57,19 +54,21 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
5754 auth
5855 // 不做具体的 AuthenticationManager 选择这里的默认使用 DaoAuthenticationConfigurer
5956 // 这个 DetailsService 单纯就是从 Dao 层取得用户数据,它不进行密码校验
60- .userDetailsService (customUserDetailsService )
57+ .userDetailsService (customUserDetailsService ) // 用户认证处理
6158 // 如果上面那个 userDetailsService 够简单其实可以像下面这样用 SQL 语句查询比对
6259 // .dataSource(dataSource)
6360 // .usersByUsernameQuery("Select * from users where username=?")
6461 // 这个 passwordEncoder 配置的实际就是 DaoAuthenticationConfigurer 的加密器
65- .passwordEncoder (passwordEncoder ());
62+ .passwordEncoder (passwordEncoder ()); // 密码处理
6663
6764 }
6865
66+
6967 @ Override
7068 protected void configure (HttpSecurity http ) throws Exception {
7169 List <String > permitAll = authIgnoreConfig .getIgnoreUrls ();
7270 permitAll .add (SysConstant .LOGIN_URL );
71+ permitAll .add (SysConstant .LOGIN_PROCESS );
7372 permitAll .add (SysConstant .LOGOUT_URL );
7473 permitAll .add (SysConstant .JWT_AUTH );
7574 permitAll .add ("/static/images/**" );
@@ -93,12 +92,17 @@ protected void configure(HttpSecurity http) throws Exception {
9392
9493// http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
9594
95+ http .addFilterBefore (validateCodeFilter , UsernamePasswordAuthenticationFilter .class );
96+
9697 http .formLogin ()
9798 .loginPage (SysConstant .LOGIN_URL )
98- // .loginProcessingUrl(SysConstant.LOGIN_PROCESS)
99+ .loginProcessingUrl (SysConstant .LOGIN_PROCESS )
99100 .successHandler (authenticationSuccessHandler ())
100101 .failureHandler (customSimpleUrlAuthenticationFailureHandler ());
101102
103+ // .defaultSuccessUrl("/index")
104+ // .failureUrl("/login");
105+
102106 http .logout ()
103107 .logoutSuccessHandler (customLogoutSuccessHandler ())
104108 .permitAll ();
@@ -110,7 +114,6 @@ protected void configure(HttpSecurity http) throws Exception {
110114 http .csrf ().disable ();
111115
112116 // 如果不用验证码,注释这个过滤器即可
113- // http.addFilterBefore(new ValidateCodeFilter(), UsernamePasswordAuthenticationFilter.class);
114117// http.addFilterAt(usernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
115118
116119
@@ -172,20 +175,5 @@ public AuthenticationFailureHandler customSimpleUrlAuthenticationFailureHandler(
172175 return customSimpleUrlAuthenticationFailureHandler ;
173176 }
174177
175- public AuthenticationFailureHandler exceptionMappingAuthenticationFailureHandler () {
176- ExceptionMappingAuthenticationFailureHandler exceptionMappingAuthenticationFailureHandle = new ExceptionMappingAuthenticationFailureHandler ();
177- exceptionMappingAuthenticationFailureHandle .setDefaultFailureUrl (SysConstant .LOGIN_URL );
178- exceptionMappingAuthenticationFailureHandle .setExceptionMappings (buildExceptionMappings ());
179- return exceptionMappingAuthenticationFailureHandle ;
180- }
181-
182- private Map <String , String > buildExceptionMappings () {
183- Map <String , String > urlMappings = new HashMap <>();
184- urlMappings .put (BadCredentialsException .class .getName (), "/login_fail?error=" + LoginError .BADCREDENTIALS .getType ());
185- urlMappings .put (LockedException .class .getName (), "/login_fail?error=" + LoginError .LOCKED .getType ());
186- urlMappings .put (AccountExpiredException .class .getName (), "/login_fail?error=" + LoginError .ACCOUNTEXPIRED .getType ());
187- urlMappings .put (UsernameNotFoundException .class .getName (), "/login_fail?error=" + LoginError .USERNAMENOTFOUND .getType ());
188- return urlMappings ;
189- }
190178
191179}
0 commit comments