package com.genersoft.iot.vmp.conf.security; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.*; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component public class LoginFailureHandler implements AuthenticationFailureHandler { private final static Logger logger = LoggerFactory.getLogger(LoginFailureHandler.class); @Autowired private ObjectMapper objectMapper; @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException { String username = request.getParameter("username"); if (e instanceof AccountExpiredException) { // 账号过期 logger.info("[登录失败] - 用户[{}]账号过期", username); } else if (e instanceof BadCredentialsException) { // 密码错误 logger.info("[登录失败] - 用户[{}]密码/SIP服务器ID 错误", username); } else if (e instanceof CredentialsExpiredException) { // 密码过期 logger.info("[登录失败] - 用户[{}]密码过期", username); } else if (e instanceof DisabledException) { // 用户被禁用 logger.info("[登录失败] - 用户[{}]被禁用", username); } else if (e instanceof LockedException) { // 用户被锁定 logger.info("[登录失败] - 用户[{}]被锁定", username); } else if (e instanceof InternalAuthenticationServiceException) { // 内部错误 logger.error(String.format("[登录失败] - [%s]内部错误", username), e); } else { // 其他错误 logger.error(String.format("[登录失败] - [%s]其他错误", username), e); } Map map = new HashMap<>(); map.put("code","0"); map.put("msg","登录失败"); response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(objectMapper.writeValueAsString(map)); } }