1
2
3
4
5
6
7
8
9
10
11
12
13 package org.springframework.security.oauth2.provider.error;
14
15 import java.io.IOException;
16
17 import javax.servlet.ServletException;
18 import javax.servlet.http.HttpServletRequest;
19 import javax.servlet.http.HttpServletResponse;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.springframework.http.ResponseEntity;
24 import org.springframework.web.context.request.ServletWebRequest;
25 import org.springframework.web.servlet.HandlerExceptionResolver;
26 import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
27
28
29
30
31
32
33
34
35 public abstract class AbstractOAuth2SecurityExceptionHandler {
36
37
38 protected final Log logger = LogFactory.getLog(getClass());
39
40 private WebResponseExceptionTranslator<?> exceptionTranslator = new DefaultWebResponseExceptionTranslator();
41
42 private OAuth2ExceptionRenderer exceptionRenderer = new DefaultOAuth2ExceptionRenderer();
43
44
45 private HandlerExceptionResolver handlerExceptionResolver = new DefaultHandlerExceptionResolver();
46
47 public void setExceptionTranslator(WebResponseExceptionTranslator<?> exceptionTranslator) {
48 this.exceptionTranslator = exceptionTranslator;
49 }
50
51 public void setExceptionRenderer(OAuth2ExceptionRenderer exceptionRenderer) {
52 this.exceptionRenderer = exceptionRenderer;
53 }
54
55 protected final void doHandle(HttpServletRequest request, HttpServletResponse response, Exception authException)
56 throws IOException, ServletException {
57 try {
58 ResponseEntity<?> result = exceptionTranslator.translate(authException);
59 result = enhanceResponse(result, authException);
60 exceptionRenderer.handleHttpEntityResponse(result, new ServletWebRequest(request, response));
61 response.flushBuffer();
62 }
63 catch (ServletException e) {
64
65
66 if (handlerExceptionResolver.resolveException(request, response, this, e) == null) {
67 throw e;
68 }
69 }
70 catch (IOException e) {
71 throw e;
72 }
73 catch (RuntimeException e) {
74 throw e;
75 }
76 catch (Exception e) {
77
78 throw new RuntimeException(e);
79 }
80 }
81
82
83
84
85
86
87
88
89
90
91
92
93 protected ResponseEntity<?> enhanceResponse(ResponseEntity<?> result,
94 Exception authException) {
95 return result;
96 }
97
98 }