|
39 | 39 | import org.springframework.security.authentication.AuthenticationTrustResolverImpl; |
40 | 40 | import org.springframework.security.authentication.BadCredentialsException; |
41 | 41 | import org.springframework.security.authentication.RememberMeAuthenticationToken; |
| 42 | +import org.springframework.security.authorization.AuthorizationDeniedException; |
42 | 43 | import org.springframework.security.core.AuthenticationException; |
43 | 44 | import org.springframework.security.core.authority.AuthorityUtils; |
44 | 45 | import org.springframework.security.core.context.SecurityContext; |
@@ -288,6 +289,20 @@ public void setMessageSourceWhenNotNullThenCanGet() { |
288 | 289 | verify(source).getMessage(eq(code), any(), any()); |
289 | 290 | } |
290 | 291 |
|
| 292 | + @Test |
| 293 | + public void servletExceptionWrappingAuthorizationDeniedExceptionIsRethrown() throws Exception { |
| 294 | + MockHttpServletRequest request = get("/secure/page.html").build(); |
| 295 | + MockHttpServletResponse response = new MockHttpServletResponse(); |
| 296 | + FilterChain fc = mockFilterChainWithException(new ServletException(new AuthorizationDeniedException("Denied"))); |
| 297 | + SecurityContextHolder.getContext() |
| 298 | + .setAuthentication(new AnonymousAuthenticationToken("ignored", "ignored", |
| 299 | + AuthorityUtils.createAuthorityList("IGNORED"))); |
| 300 | + ExceptionTranslationFilter filter = new ExceptionTranslationFilter(this.mockEntryPoint); |
| 301 | + assertThatExceptionOfType(ServletException.class) |
| 302 | + .isThrownBy(() -> filter.doFilter(request, response, fc)) |
| 303 | + .withCauseInstanceOf(AuthorizationDeniedException.class); |
| 304 | + } |
| 305 | + |
291 | 306 | private FilterChain mockFilterChainWithException(Exception exception) throws ServletException, IOException { |
292 | 307 | FilterChain fc = mock(FilterChain.class); |
293 | 308 | willThrow(exception).given(fc).doFilter(any(HttpServletRequest.class), any(HttpServletResponse.class)); |
|
0 commit comments