.and()
//这里必须要写formLogin(),不然原有的UsernamePasswordAuthenticationFilter不会出现,也就无法配置自定义的UsernamePasswordAuthenticationFilter
.formLogin()
.loginPage("/login_page")
.loginProcessingUrl("/login")
.usernameParameter("username")
.passwordParameter("password")
.successHandler(successHandler)
.failureHandler(failureHandler)
.permitAll()
loginProcessingUrl("/login"): 这行代码指定了Spring Security应该监听哪个URL以处理登录请求。当客户端发送POST请求到/login时,Spring Security会拦截并调用UsernamePasswordAuthenticationFilter来处理这个请求。
.and()
.addFilterAt(jsonAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
这里调用这个后,同时自定义JsonAuthenticationFilter添加到了Spring Security的过滤器链中,并替换了默认的UsernamePasswordAuthenticationFilter。当请求到达/login时,将由JsonAuthenticationFilter来处理
loginPage("/login_page"): 指定登录页面的URL,当用户尝试访问受保护的资源但尚未登录时,会被重定向到此页面
登录成功与失败处理
public JsonAuthenticationFilter jsonAuthenticationFilter() throws Exception {
JsonAuthenticationFilter filter = new JsonAuthenticationFilter();
filter.setAuthenticationSuccessHandler(successHandler);
filter.setAuthenticationFailureHandler(failureHandler);
filter.setFilterProcessesUrl("/login");
filter.setAuthenticationManager(authenticationManagerBean());
return filter;
}
当登录成功时,会调用successHandler来处理后续操作,如重定向或返回响应
如果登录失败,则调用failureHandler来处理错误,如显示错误消息或重定向到错误页面