|
16 | 16 | package org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers;
|
17 | 17 |
|
18 | 18 | import java.io.IOException;
|
19 |
| -import java.util.function.Supplier; |
20 |
| - |
21 |
| -import jakarta.servlet.FilterChain; |
22 |
| -import jakarta.servlet.ServletException; |
23 |
| -import jakarta.servlet.http.HttpServletRequest; |
24 |
| -import jakarta.servlet.http.HttpServletResponse; |
25 | 19 |
|
26 | 20 | import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContext;
|
27 | 21 | import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextHolder;
|
| 22 | +import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextResolver; |
28 | 23 | import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
|
29 |
| -import org.springframework.security.web.util.UrlUtils; |
30 | 24 | import org.springframework.util.Assert;
|
31 | 25 | import org.springframework.web.filter.OncePerRequestFilter;
|
32 |
| -import org.springframework.web.util.UriComponentsBuilder; |
| 26 | + |
| 27 | +import jakarta.servlet.FilterChain; |
| 28 | +import jakarta.servlet.ServletException; |
| 29 | +import jakarta.servlet.http.HttpServletRequest; |
| 30 | +import jakarta.servlet.http.HttpServletResponse; |
33 | 31 |
|
34 | 32 | /**
|
35 | 33 | * A {@code Filter} that associates the {@link AuthorizationServerContext} to the {@link AuthorizationServerContextHolder}.
|
|
41 | 39 | * @see AuthorizationServerSettings
|
42 | 40 | */
|
43 | 41 | final class AuthorizationServerContextFilter extends OncePerRequestFilter {
|
44 |
| - private final AuthorizationServerSettings authorizationServerSettings; |
| 42 | + private final AuthorizationServerContextResolver authorizationServerContextResolver; |
45 | 43 |
|
46 |
| - AuthorizationServerContextFilter(AuthorizationServerSettings authorizationServerSettings) { |
47 |
| - Assert.notNull(authorizationServerSettings, "authorizationServerSettings cannot be null"); |
48 |
| - this.authorizationServerSettings = authorizationServerSettings; |
| 44 | + AuthorizationServerContextFilter(AuthorizationServerContextResolver authorizationServerContextResolver) { |
| 45 | + Assert.notNull(authorizationServerContextResolver, "authorizationServerContextResolver cannot be null"); |
| 46 | + this.authorizationServerContextResolver = authorizationServerContextResolver; |
49 | 47 | }
|
50 | 48 |
|
51 | 49 | @Override
|
52 | 50 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
53 | 51 | throws ServletException, IOException {
|
54 | 52 |
|
55 | 53 | try {
|
56 |
| - AuthorizationServerContext authorizationServerContext = |
57 |
| - new DefaultAuthorizationServerContext( |
58 |
| - () -> resolveIssuer(this.authorizationServerSettings, request), |
59 |
| - this.authorizationServerSettings); |
| 54 | + AuthorizationServerContext authorizationServerContext = authorizationServerContextResolver.resolve(request); |
60 | 55 | AuthorizationServerContextHolder.setContext(authorizationServerContext);
|
61 | 56 | filterChain.doFilter(request, response);
|
62 | 57 | } finally {
|
63 | 58 | AuthorizationServerContextHolder.resetContext();
|
64 | 59 | }
|
65 | 60 | }
|
66 | 61 |
|
67 |
| - private static String resolveIssuer(AuthorizationServerSettings authorizationServerSettings, HttpServletRequest request) { |
68 |
| - return authorizationServerSettings.getIssuer() != null ? |
69 |
| - authorizationServerSettings.getIssuer() : |
70 |
| - getContextPath(request); |
71 |
| - } |
72 |
| - |
73 |
| - private static String getContextPath(HttpServletRequest request) { |
74 |
| - // @formatter:off |
75 |
| - return UriComponentsBuilder.fromHttpUrl(UrlUtils.buildFullRequestUrl(request)) |
76 |
| - .replacePath(request.getContextPath()) |
77 |
| - .replaceQuery(null) |
78 |
| - .fragment(null) |
79 |
| - .build() |
80 |
| - .toUriString(); |
81 |
| - // @formatter:on |
82 |
| - } |
83 |
| - |
84 |
| - private static final class DefaultAuthorizationServerContext implements AuthorizationServerContext { |
85 |
| - private final Supplier<String> issuerSupplier; |
86 |
| - private final AuthorizationServerSettings authorizationServerSettings; |
87 |
| - |
88 |
| - private DefaultAuthorizationServerContext(Supplier<String> issuerSupplier, AuthorizationServerSettings authorizationServerSettings) { |
89 |
| - this.issuerSupplier = issuerSupplier; |
90 |
| - this.authorizationServerSettings = authorizationServerSettings; |
91 |
| - } |
92 |
| - |
93 |
| - @Override |
94 |
| - public String getIssuer() { |
95 |
| - return this.issuerSupplier.get(); |
96 |
| - } |
97 |
| - |
98 |
| - @Override |
99 |
| - public AuthorizationServerSettings getAuthorizationServerSettings() { |
100 |
| - return this.authorizationServerSettings; |
101 |
| - } |
102 |
| - |
103 |
| - } |
104 |
| - |
105 | 62 | }
|
0 commit comments