|
|
|
@ -22,7 +22,6 @@ import jakarta.servlet.FilterChain; |
|
|
|
import jakarta.servlet.ServletRequest; |
|
|
|
import jakarta.servlet.ServletRequest; |
|
|
|
import jakarta.servlet.ServletResponse; |
|
|
|
import jakarta.servlet.ServletResponse; |
|
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
|
import org.apache.commons.codec.binary.Base64; |
|
|
|
|
|
|
|
import org.junit.jupiter.api.AfterEach; |
|
|
|
import org.junit.jupiter.api.AfterEach; |
|
|
|
import org.junit.jupiter.api.BeforeEach; |
|
|
|
import org.junit.jupiter.api.BeforeEach; |
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
@ -38,6 +37,7 @@ import org.springframework.security.core.Authentication; |
|
|
|
import org.springframework.security.core.authority.AuthorityUtils; |
|
|
|
import org.springframework.security.core.authority.AuthorityUtils; |
|
|
|
import org.springframework.security.core.context.SecurityContext; |
|
|
|
import org.springframework.security.core.context.SecurityContext; |
|
|
|
import org.springframework.security.core.context.SecurityContextHolder; |
|
|
|
import org.springframework.security.core.context.SecurityContextHolder; |
|
|
|
|
|
|
|
import org.springframework.security.test.web.CodecTestUtils; |
|
|
|
import org.springframework.security.web.authentication.WebAuthenticationDetails; |
|
|
|
import org.springframework.security.web.authentication.WebAuthenticationDetails; |
|
|
|
import org.springframework.security.web.context.SecurityContextRepository; |
|
|
|
import org.springframework.security.web.context.SecurityContextRepository; |
|
|
|
import org.springframework.web.util.WebUtils; |
|
|
|
import org.springframework.web.util.WebUtils; |
|
|
|
@ -104,7 +104,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void testInvalidBasicAuthorizationTokenIsIgnored() throws Exception { |
|
|
|
public void testInvalidBasicAuthorizationTokenIsIgnored() throws Exception { |
|
|
|
String token = "NOT_A_VALID_TOKEN_AS_MISSING_COLON"; |
|
|
|
String token = "NOT_A_VALID_TOKEN_AS_MISSING_COLON"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
final MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
final MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
@ -134,7 +134,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void testNormalOperation() throws Exception { |
|
|
|
public void testNormalOperation() throws Exception { |
|
|
|
String token = "rod:koala"; |
|
|
|
String token = "rod:koala"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
@ -150,7 +150,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void doFilterWhenSchemeLowercaseThenCaseInsensitveMatchWorks() throws Exception { |
|
|
|
public void doFilterWhenSchemeLowercaseThenCaseInsensitveMatchWorks() throws Exception { |
|
|
|
String token = "rod:koala"; |
|
|
|
String token = "rod:koala"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
@ -165,7 +165,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void doFilterWhenSchemeMixedCaseThenCaseInsensitiveMatchWorks() throws Exception { |
|
|
|
public void doFilterWhenSchemeMixedCaseThenCaseInsensitiveMatchWorks() throws Exception { |
|
|
|
String token = "rod:koala"; |
|
|
|
String token = "rod:koala"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "BaSiC " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "BaSiC " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); |
|
|
|
FilterChain chain = mock(FilterChain.class); |
|
|
|
FilterChain chain = mock(FilterChain.class); |
|
|
|
@ -200,7 +200,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void testSuccessLoginThenFailureLoginResultsInSessionLosingToken() throws Exception { |
|
|
|
public void testSuccessLoginThenFailureLoginResultsInSessionLosingToken() throws Exception { |
|
|
|
String token = "rod:koala"; |
|
|
|
String token = "rod:koala"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
final MockHttpServletResponse response1 = new MockHttpServletResponse(); |
|
|
|
final MockHttpServletResponse response1 = new MockHttpServletResponse(); |
|
|
|
FilterChain chain = mock(FilterChain.class); |
|
|
|
FilterChain chain = mock(FilterChain.class); |
|
|
|
@ -212,7 +212,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
// NOW PERFORM FAILED AUTHENTICATION
|
|
|
|
// NOW PERFORM FAILED AUTHENTICATION
|
|
|
|
token = "otherUser:WRONG_PASSWORD"; |
|
|
|
token = "otherUser:WRONG_PASSWORD"; |
|
|
|
request = new MockHttpServletRequest(); |
|
|
|
request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
final MockHttpServletResponse response2 = new MockHttpServletResponse(); |
|
|
|
final MockHttpServletResponse response2 = new MockHttpServletResponse(); |
|
|
|
chain = mock(FilterChain.class); |
|
|
|
chain = mock(FilterChain.class); |
|
|
|
this.filter.doFilter(request, response2, chain); |
|
|
|
this.filter.doFilter(request, response2, chain); |
|
|
|
@ -228,7 +228,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void testWrongPasswordContinuesFilterChainIfIgnoreFailureIsTrue() throws Exception { |
|
|
|
public void testWrongPasswordContinuesFilterChainIfIgnoreFailureIsTrue() throws Exception { |
|
|
|
String token = "rod:WRONG_PASSWORD"; |
|
|
|
String token = "rod:WRONG_PASSWORD"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
this.filter = new BasicAuthenticationFilter(this.manager); |
|
|
|
this.filter = new BasicAuthenticationFilter(this.manager); |
|
|
|
@ -244,7 +244,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void testWrongPasswordReturnsForbiddenIfIgnoreFailureIsFalse() throws Exception { |
|
|
|
public void testWrongPasswordReturnsForbiddenIfIgnoreFailureIsFalse() throws Exception { |
|
|
|
String token = "rod:WRONG_PASSWORD"; |
|
|
|
String token = "rod:WRONG_PASSWORD"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
request.setSession(new MockHttpSession()); |
|
|
|
assertThat(this.filter.isIgnoreFailure()).isFalse(); |
|
|
|
assertThat(this.filter.isIgnoreFailure()).isFalse(); |
|
|
|
@ -262,7 +262,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
public void skippedOnErrorDispatch() throws Exception { |
|
|
|
public void skippedOnErrorDispatch() throws Exception { |
|
|
|
String token = "bad:credentials"; |
|
|
|
String token = "bad:credentials"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE, "/error"); |
|
|
|
request.setAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE, "/error"); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
@ -286,7 +286,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
String token = "rod:äöü"; |
|
|
|
String token = "rod:äöü"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", |
|
|
|
request.addHeader("Authorization", |
|
|
|
"Basic " + new String(Base64.encodeBase64(token.getBytes(StandardCharsets.UTF_8)))); |
|
|
|
"Basic " + CodecTestUtils.encodeBase64(token.getBytes(StandardCharsets.UTF_8))); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
@ -315,7 +315,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
String token = "rod:äöü"; |
|
|
|
String token = "rod:äöü"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", |
|
|
|
request.addHeader("Authorization", |
|
|
|
"Basic " + new String(Base64.encodeBase64(token.getBytes(StandardCharsets.ISO_8859_1)))); |
|
|
|
"Basic " + CodecTestUtils.encodeBase64(token.getBytes(StandardCharsets.ISO_8859_1))); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
@ -344,7 +344,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
String token = "rod:äöü"; |
|
|
|
String token = "rod:äöü"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", |
|
|
|
request.addHeader("Authorization", |
|
|
|
"Basic " + new String(Base64.encodeBase64(token.getBytes(StandardCharsets.UTF_8)))); |
|
|
|
"Basic " + CodecTestUtils.encodeBase64(token.getBytes(StandardCharsets.UTF_8))); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
@ -377,7 +377,7 @@ public class BasicAuthenticationFilterTests { |
|
|
|
this.filter.setSecurityContextRepository(securityContextRepository); |
|
|
|
this.filter.setSecurityContextRepository(securityContextRepository); |
|
|
|
String token = "rod:koala"; |
|
|
|
String token = "rod:koala"; |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes()))); |
|
|
|
request.addHeader("Authorization", "Basic " + CodecTestUtils.encodeBase64(token)); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
request.setServletPath("/some_file.html"); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse(); |
|
|
|
// Test
|
|
|
|
// Test
|
|
|
|
|