|
52 | 52 | import org.springframework.security.authorization.ReactiveAuthorizationManager;
|
53 | 53 | import org.springframework.security.config.Customizer;
|
54 | 54 | import org.springframework.security.core.Authentication;
|
| 55 | +import org.springframework.security.core.AuthenticationException; |
55 | 56 | import org.springframework.security.core.GrantedAuthority;
|
56 | 57 | import org.springframework.security.core.authority.AuthorityUtils;
|
57 | 58 | import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
|
|
102 | 103 | import org.springframework.security.web.server.MatcherSecurityWebFilterChain;
|
103 | 104 | import org.springframework.security.web.server.SecurityWebFilterChain;
|
104 | 105 | import org.springframework.security.web.server.ServerAuthenticationEntryPoint;
|
| 106 | +import org.springframework.security.web.server.WebFilterExchange; |
105 | 107 | import org.springframework.security.web.server.authentication.AnonymousAuthenticationWebFilter;
|
106 | 108 | import org.springframework.security.web.server.authentication.AuthenticationWebFilter;
|
107 | 109 | import org.springframework.security.web.server.authentication.HttpBasicServerAuthenticationEntryPoint;
|
@@ -1788,6 +1790,28 @@ private Mono<MatchResult> nullAuthentication(Authentication authentication) {
|
1788 | 1790 | }
|
1789 | 1791 | }
|
1790 | 1792 |
|
| 1793 | + private class BearerTokenAuthenticationWebFilter extends AuthenticationWebFilter { |
| 1794 | + private ServerAuthenticationFailureHandler authenticationFailureHandler; |
| 1795 | + |
| 1796 | + BearerTokenAuthenticationWebFilter(ReactiveAuthenticationManager authenticationManager) { |
| 1797 | + super(authenticationManager); |
| 1798 | + } |
| 1799 | + |
| 1800 | + @Override |
| 1801 | + public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { |
| 1802 | + WebFilterExchange webFilterExchange = new WebFilterExchange(exchange, chain); |
| 1803 | + return super.filter(exchange, chain) |
| 1804 | + .onErrorResume(AuthenticationException.class, e -> this.authenticationFailureHandler |
| 1805 | + .onAuthenticationFailure(webFilterExchange, e)); |
| 1806 | + } |
| 1807 | + |
| 1808 | + @Override |
| 1809 | + public void setAuthenticationFailureHandler(ServerAuthenticationFailureHandler authenticationFailureHandler) { |
| 1810 | + super.setAuthenticationFailureHandler(authenticationFailureHandler); |
| 1811 | + this.authenticationFailureHandler = authenticationFailureHandler; |
| 1812 | + } |
| 1813 | + } |
| 1814 | + |
1791 | 1815 | /**
|
1792 | 1816 | * Configures JWT Resource Server Support
|
1793 | 1817 | */
|
@@ -1861,7 +1885,7 @@ public OAuth2ResourceServerSpec and() {
|
1861 | 1885 |
|
1862 | 1886 | protected void configure(ServerHttpSecurity http) {
|
1863 | 1887 | ReactiveAuthenticationManager authenticationManager = getAuthenticationManager();
|
1864 |
| - AuthenticationWebFilter oauth2 = new AuthenticationWebFilter(authenticationManager); |
| 1888 | + AuthenticationWebFilter oauth2 = new BearerTokenAuthenticationWebFilter(authenticationManager); |
1865 | 1889 | oauth2.setServerAuthenticationConverter(bearerTokenConverter);
|
1866 | 1890 | oauth2.setAuthenticationFailureHandler(new ServerAuthenticationEntryPointFailureHandler(entryPoint));
|
1867 | 1891 | http
|
@@ -1967,7 +1991,7 @@ protected ReactiveOpaqueTokenIntrospector getIntrospector() {
|
1967 | 1991 |
|
1968 | 1992 | protected void configure(ServerHttpSecurity http) {
|
1969 | 1993 | ReactiveAuthenticationManager authenticationManager = getAuthenticationManager();
|
1970 |
| - AuthenticationWebFilter oauth2 = new AuthenticationWebFilter(authenticationManager); |
| 1994 | + AuthenticationWebFilter oauth2 = new BearerTokenAuthenticationWebFilter(authenticationManager); |
1971 | 1995 | oauth2.setServerAuthenticationConverter(bearerTokenConverter);
|
1972 | 1996 | oauth2.setAuthenticationFailureHandler(new ServerAuthenticationEntryPointFailureHandler(entryPoint));
|
1973 | 1997 | http.addFilterAt(oauth2, SecurityWebFiltersOrder.AUTHENTICATION);
|
|
0 commit comments