Skip to content

Commit 983e4e5

Browse files
authored
BAEL-8505: Fix AuthenticationFilter flow. (#18349)
* BAEL-8505: Fix AuthenticationFilter flow. * rename test
1 parent 77b0cf8 commit 983e4e5

File tree

2 files changed

+81
-3
lines changed

2 files changed

+81
-3
lines changed

spring-security-modules/spring-security-web-boot-1/src/main/java/com/baeldung/apikeyauthentication/configuration/AuthenticationFilter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ public class AuthenticationFilter extends GenericFilterBean {
1717

1818
@Override
1919
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
20-
throws IOException, ServletException {
20+
throws IOException, ServletException {
2121
try {
2222
Authentication authentication = AuthenticationService.getAuthentication((HttpServletRequest) request);
2323
SecurityContextHolder.getContext().setAuthentication(authentication);
24+
filterChain.doFilter(request, response);
2425
} catch (Exception exp) {
2526
HttpServletResponse httpResponse = (HttpServletResponse) response;
2627
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
@@ -30,7 +31,5 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
3031
writer.flush();
3132
writer.close();
3233
}
33-
34-
filterChain.doFilter(request, response);
3534
}
3635
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.baeldung.apikeyauthentication.configuration;
2+
3+
import org.junit.Before;
4+
import org.junit.Test;
5+
import org.junit.runner.RunWith;
6+
import org.mockito.InjectMocks;
7+
import org.mockito.Mock;
8+
import org.mockito.MockedStatic;
9+
import org.mockito.Mockito;
10+
import org.mockito.MockitoAnnotations;
11+
import org.mockito.junit.MockitoJUnitRunner;
12+
import org.springframework.http.MediaType;
13+
import org.springframework.security.core.Authentication;
14+
import org.springframework.security.core.context.SecurityContextHolder;
15+
import jakarta.servlet.FilterChain;
16+
import jakarta.servlet.ServletException;
17+
import jakarta.servlet.http.HttpServletRequest;
18+
import jakarta.servlet.http.HttpServletResponse;
19+
import java.io.IOException;
20+
import java.io.PrintWriter;
21+
import static org.mockito.Mockito.*;
22+
23+
24+
@RunWith(MockitoJUnitRunner.class)
25+
public class AuthenticationFilterUnitTest {
26+
27+
@Mock
28+
private HttpServletRequest request;
29+
30+
@Mock
31+
private HttpServletResponse response;
32+
33+
@Mock
34+
private FilterChain filterChain;
35+
36+
@Mock
37+
private Authentication authentication;
38+
39+
@InjectMocks
40+
private AuthenticationFilter authenticationFilter;
41+
42+
@Before
43+
public void setUp() {
44+
MockitoAnnotations.openMocks(this);
45+
}
46+
47+
@Test
48+
public void givenValidAuthentication_whenDoFilter_thenProceedsWithFilterChain() throws IOException, ServletException {
49+
try (MockedStatic<AuthenticationService> mockedAuthService = Mockito.mockStatic(AuthenticationService.class)) {
50+
mockedAuthService.when(() -> AuthenticationService.getAuthentication(request)).thenReturn(authentication);
51+
52+
authenticationFilter.doFilter(request, response, filterChain);
53+
54+
mockedAuthService.verify(() -> AuthenticationService.getAuthentication(request));
55+
verify(filterChain).doFilter(request, response);
56+
verify(response, never()).setStatus(HttpServletResponse.SC_UNAUTHORIZED);
57+
}
58+
}
59+
60+
@Test
61+
public void givenAuthenticationFailure_whenDoFilter_thenReturnsUnauthorizedResponse() throws IOException, ServletException {
62+
try (MockedStatic<AuthenticationService> mockedAuthService = Mockito.mockStatic(AuthenticationService.class)) {
63+
mockedAuthService.when(() -> AuthenticationService.getAuthentication(request))
64+
.thenThrow(new RuntimeException("Authentication failed"));
65+
66+
PrintWriter writer = mock(PrintWriter.class);
67+
when(response.getWriter()).thenReturn(writer);
68+
69+
authenticationFilter.doFilter(request, response, filterChain);
70+
71+
verify(response).setStatus(HttpServletResponse.SC_UNAUTHORIZED);
72+
verify(response).setContentType(MediaType.APPLICATION_JSON_VALUE);
73+
verify(writer).print("Authentication failed");
74+
verify(writer).flush();
75+
verify(writer).close();
76+
verify(filterChain, never()).doFilter(request, response);
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)