package com.keao.edu.common.security; import com.keao.edu.common.constant.CommonConstants; import com.keao.edu.common.entity.HttpResponseResult; import org.apache.commons.lang3.exception.ExceptionUtils; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.http.MediaType; import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; import org.springframework.security.web.AuthenticationEntryPoint; 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.io.PrintWriter; @Component public class BaseAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { response.setCharacterEncoding(CommonConstants.UTF8); response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); response.setStatus(HttpServletResponse.SC_OK); PrintWriter printWriter = response.getWriter(); Throwable e = ExceptionUtils.getRootCause(authException); if (e == null) { e = authException; } int errorCode = 500; if (e instanceof InvalidTokenException) { errorCode = HttpServletResponse.SC_UNAUTHORIZED; } if (e instanceof InsufficientAuthenticationException) { errorCode = HttpServletResponse.SC_FORBIDDEN; } HttpResponseResult result = new HttpResponseResult(false, errorCode, null, e.getMessage()); ObjectMapper objectMapper = new ObjectMapper(); printWriter.append(objectMapper.writeValueAsString(result)); } }