Spring Security – 自定义登录
1 使用formLogin()
http
.formLogin()
.loginPage("/myLogin") // 自定义登录页面
.loginProcessingUrl("/doLogin") // 自定义登录接口
.permitAll();
2 自定义登录过滤器
SpringSecurity 默认使用的是 UsernamePasswordAuthenticationFilter 过滤器,我们可以实现 AbstractAuthenticationProcessingFilter 类来自定义登录逻辑。
public class CustomLoginFilter extends AbstractAuthenticationProcessingFilter {
//private static final String defaultFilterProcessesUrl = "/login";
public CustomLoginFilter(String defaultFilterProcessesUrl) {
super(defaultFilterProcessesUrl);
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
String method = request.getMethod();
// 仅使用POST方法提交
if(!"POST".equalsIgnoreCase(method)){
throw new AuthenticationServiceException(
"Authentication method not supported: " + request.getMethod());
}
// 从Session中取出验证码
String verify = (String) request.getSession().getAttribute("verify");
// 从请求中获取验证码
String code = request.getParameter("code");
// 检查验证码
checkCode(code,verify);
// 从请求中获取 用户名及命名
String username = request.getParameter("username");
String password = request.getParameter(