1
1
package com .baeldung .config ;
2
2
3
3
import java .io .IOException ;
4
+ import java .net .URL ;
4
5
import java .util .List ;
5
6
import java .util .Map ;
6
7
9
10
10
11
import org .slf4j .Logger ;
11
12
import org .slf4j .LoggerFactory ;
13
+ import org .springframework .beans .factory .annotation .Autowired ;
14
+ import org .springframework .cloud .netflix .zuul .filters .ZuulProperties ;
15
+ import org .springframework .cloud .netflix .zuul .filters .ZuulProperties .ZuulRoute ;
16
+ import org .springframework .cloud .netflix .zuul .filters .support .FilterConstants ;
12
17
import org .springframework .stereotype .Component ;
13
18
14
19
import com .google .common .collect .Lists ;
19
24
@ Component
20
25
public class CustomPreZuulFilter extends ZuulFilter {
21
26
27
+ @ Autowired
28
+ private ZuulProperties zuulProperties ;
29
+
22
30
private final Logger logger = LoggerFactory .getLogger (this .getClass ());
23
31
private final static String REDIRECT_URL = "http://localhost:8089/auth/redirect/" ;
24
32
private final static String CLIENT_ID = "newClient" ;
@@ -44,21 +52,30 @@ public Object run() {
44
52
45
53
ctx .setRequestQueryParams (params );
46
54
} else if (requestURI .contains ("auth/token" ) || requestURI .contains ("auth/refresh" )) {
47
-
48
55
try {
49
- String cookieValue = requestURI .contains ("token" ) ? extractCookie (req , "code" )
50
- : extractCookie (req , "refreshToken" );
51
-
52
- String formParams = createFormData (requestURI , cookieValue );
53
-
54
- byte [] bytes = formParams .getBytes ("UTF-8" );
55
-
56
+ byte [] bytes ;
57
+ if (requestURI .contains ("auth/refresh/revoke" )) {
58
+ final String proxy = (String ) ctx .get (FilterConstants .PROXY_KEY );
59
+ final ZuulRoute zuulRoute = this .zuulProperties .getRoutes ().get (proxy + "revoke" );
60
+
61
+ ctx .put (FilterConstants .REQUEST_URI_KEY , "" );
62
+ ctx .setRouteHost (new URL (zuulRoute .getUrl ()));
63
+
64
+ String cookieValue = extractCookie (req , "refreshToken" );
65
+ String formParams = createFormData (requestURI , cookieValue );
66
+ bytes = formParams .getBytes ("UTF-8" );
67
+ } else {
68
+ String cookieValue = requestURI .contains ("token" ) ? extractCookie (req , "code" )
69
+ : extractCookie (req , "refreshToken" );
70
+ String formParams = createFormData (requestURI , cookieValue );
71
+ bytes = formParams .getBytes ("UTF-8" );
72
+ }
56
73
ctx .setRequest (new CustomHttpServletRequest (req , bytes ));
57
-
58
74
} catch (IOException e ) {
59
75
e .printStackTrace ();
60
76
}
61
- }
77
+
78
+ }
62
79
return null ;
63
80
}
64
81
@@ -75,13 +92,19 @@ private String extractCookie(HttpServletRequest req, String name) {
75
92
}
76
93
77
94
private String createFormData (String requestURI , String cookieValue ) {
78
- String formData ;
95
+ String formData = "" ;
79
96
if (requestURI .contains ("token" )) {
80
97
formData = String .format ("grant_type=%s&client_id=%s&client_secret=%s&redirect_uri=%s&code=%s" ,
81
98
"authorization_code" , CLIENT_ID , CLIENT_SECRET , REDIRECT_URL , cookieValue );
82
- } else {
83
- formData = String .format ("grant_type=%s&client_id=%s&client_secret=%s&refresh_token=%s" , "refresh_token" ,
84
- CLIENT_ID , CLIENT_SECRET , cookieValue );
99
+ } else if (requestURI .contains ("refresh" )) {
100
+ if (requestURI .contains ("revoke" )) {
101
+ formData = String .format ("client_id=%s&client_secret=%s&refresh_token=%s" , CLIENT_ID , CLIENT_SECRET ,
102
+ cookieValue );
103
+ } else {
104
+ formData = String .format ("grant_type=%s&client_id=%s&client_secret=%s&refresh_token=%s" ,
105
+ "refresh_token" , CLIENT_ID , CLIENT_SECRET , cookieValue );
106
+ }
107
+
85
108
}
86
109
return formData ;
87
110
}
@@ -101,7 +124,7 @@ public boolean shouldFilter() {
101
124
102
125
@ Override
103
126
public int filterOrder () {
104
- return 6 ;
127
+ return FilterConstants . PRE_DECORATION_FILTER_ORDER + 1 ;
105
128
}
106
129
107
130
@ Override
0 commit comments