BaseAccessDeniedHandler.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package com.keao.edu.common.security;
  2. import com.keao.edu.common.constant.CommonConstants;
  3. import com.keao.edu.common.entity.HttpResponseResult;
  4. import org.apache.commons.lang3.exception.ExceptionUtils;
  5. import org.codehaus.jackson.map.ObjectMapper;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.http.MediaType;
  9. import org.springframework.security.access.AccessDeniedException;
  10. import org.springframework.security.authentication.InsufficientAuthenticationException;
  11. import org.springframework.security.oauth2.common.exceptions.InvalidTokenException;
  12. import org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler;
  13. import org.springframework.stereotype.Component;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.io.IOException;
  17. import java.io.PrintWriter;
  18. @Component
  19. public class BaseAccessDeniedHandler extends OAuth2AccessDeniedHandler {
  20. private final static Logger logger = LoggerFactory.getLogger(BaseAccessDeniedHandler.class);
  21. @Override
  22. public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException authException) throws IOException {
  23. logger.info("授权失败,禁止访问 {}", request.getRequestURI());
  24. response.setCharacterEncoding(CommonConstants.UTF8);
  25. response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
  26. response.setStatus(HttpServletResponse.SC_OK);
  27. PrintWriter printWriter = response.getWriter();
  28. Throwable e = ExceptionUtils.getRootCause(authException);
  29. if (e == null) {
  30. e = authException;
  31. }
  32. int errorCode = 500;
  33. if (e instanceof InvalidTokenException) {
  34. errorCode = HttpServletResponse.SC_UNAUTHORIZED;
  35. }
  36. if (e instanceof InsufficientAuthenticationException) {
  37. errorCode = HttpServletResponse.SC_FORBIDDEN;
  38. }
  39. HttpResponseResult<Object> result = new HttpResponseResult<Object>(false, errorCode, null, e.getMessage());
  40. ObjectMapper objectMapper = new ObjectMapper();
  41. printWriter.append(objectMapper.writeValueAsString(result));
  42. printWriter.flush();
  43. printWriter.close();
  44. }
  45. }