1 package com.atlassian.asap.core.server.filter;
2
3 import com.atlassian.asap.api.Jwt;
4 import org.apache.http.HttpStatus;
5
6 import javax.servlet.Filter;
7 import javax.servlet.FilterChain;
8 import javax.servlet.FilterConfig;
9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 import java.io.IOException;
15
16
17
18
19 public abstract class AbstractRequestAuthorizationFilter implements Filter {
20 @Override
21 public void init(FilterConfig filterConfig) throws ServletException {
22
23 }
24
25 @Override
26 public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
27
28 HttpServletRequest httpRequest = (HttpServletRequest) request;
29 HttpServletResponse httpResponse = (HttpServletResponse) response;
30
31
32 Jwt jwt = (Jwt) httpRequest.getAttribute(AbstractRequestAuthenticationFilter.AUTHENTIC_JWT_REQUEST_ATTRIBUTE);
33 if (jwt == null) {
34 onTokenNotFound(httpRequest, httpResponse, filterChain);
35 } else if (isAuthorized(httpRequest, jwt)) {
36 onAuthorizationSuccess(jwt, httpRequest, httpResponse, filterChain);
37 } else {
38 onAuthorizationFailure(jwt, httpRequest, httpResponse, filterChain);
39 }
40 }
41
42
43
44
45
46
47
48
49
50
51
52
53 protected void onTokenNotFound(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
54 throw new IllegalStateException(
55 "Request authorization filter requires an authentic JWT attribute in the request. " +
56 "Have you added the authentication filter to the chain?");
57 }
58
59
60
61
62
63
64
65
66
67
68
69
70 protected void onAuthorizationFailure(Jwt jwt, HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
71 throws IOException, ServletException {
72 response.sendError(HttpStatus.SC_FORBIDDEN);
73 }
74
75
76
77
78
79
80
81
82
83
84
85 protected void onAuthorizationSuccess(Jwt jwt, HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
86 throws IOException, ServletException {
87 filterChain.doFilter(request, response);
88 }
89
90
91
92
93
94
95
96
97 protected abstract boolean isAuthorized(HttpServletRequest request, Jwt jwt);
98
99 @Override
100 public void destroy() {
101
102 }
103 }