|
|
|
@ -55,6 +55,7 @@ import org.springframework.security.core.authority.AuthorityUtils; |
|
|
|
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
|
|
|
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
|
|
|
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.core.context.SecurityContextHolderStrategy; |
|
|
|
import org.springframework.security.core.userdetails.User; |
|
|
|
import org.springframework.security.core.userdetails.User; |
|
|
|
import org.springframework.security.core.userdetails.UserDetails; |
|
|
|
import org.springframework.security.core.userdetails.UserDetails; |
|
|
|
import org.springframework.security.oauth2.client.OAuth2AuthorizeRequest; |
|
|
|
import org.springframework.security.oauth2.client.OAuth2AuthorizeRequest; |
|
|
|
@ -85,6 +86,7 @@ import org.springframework.security.oauth2.server.resource.authentication.JwtAut |
|
|
|
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; |
|
|
|
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; |
|
|
|
import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal; |
|
|
|
import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal; |
|
|
|
import org.springframework.security.test.context.TestSecurityContextHolder; |
|
|
|
import org.springframework.security.test.context.TestSecurityContextHolder; |
|
|
|
|
|
|
|
import org.springframework.security.test.context.TestSecurityContextHolderStrategyAdapter; |
|
|
|
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers; |
|
|
|
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers; |
|
|
|
import org.springframework.security.test.web.support.WebTestUtils; |
|
|
|
import org.springframework.security.test.web.support.WebTestUtils; |
|
|
|
import org.springframework.security.web.context.HttpRequestResponseHolder; |
|
|
|
import org.springframework.security.web.context.HttpRequestResponseHolder; |
|
|
|
@ -115,6 +117,8 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final SecurityContextHolderStrategy DEFAULT_SECURITY_CONTEXT_HOLDER_STRATEGY = new TestSecurityContextHolderStrategyAdapter(); |
|
|
|
|
|
|
|
|
|
|
|
private SecurityMockMvcRequestPostProcessors() { |
|
|
|
private SecurityMockMvcRequestPostProcessors() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -455,6 +459,18 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
return new OAuth2ClientRequestPostProcessor(registrationId); |
|
|
|
return new OAuth2ClientRequestPostProcessor(registrationId); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static SecurityContextHolderStrategy getSecurityContextHolderStrategy(HttpServletRequest request) { |
|
|
|
|
|
|
|
WebApplicationContext context = WebApplicationContextUtils |
|
|
|
|
|
|
|
.findWebApplicationContext(request.getServletContext()); |
|
|
|
|
|
|
|
if (context == null) { |
|
|
|
|
|
|
|
return DEFAULT_SECURITY_CONTEXT_HOLDER_STRATEGY; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (context.getBeanNamesForType(SecurityContextHolderStrategy.class).length == 0) { |
|
|
|
|
|
|
|
return DEFAULT_SECURITY_CONTEXT_HOLDER_STRATEGY; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return context.getBean(SecurityContextHolderStrategy.class); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Populates the X509Certificate instances onto the request |
|
|
|
* Populates the X509Certificate instances onto the request |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@ -710,7 +726,7 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
* @param request the {@link HttpServletRequest} to use |
|
|
|
* @param request the {@link HttpServletRequest} to use |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
final void save(Authentication authentication, HttpServletRequest request) { |
|
|
|
final void save(Authentication authentication, HttpServletRequest request) { |
|
|
|
SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); |
|
|
|
SecurityContext securityContext = getSecurityContextHolderStrategy(request).createEmptyContext(); |
|
|
|
securityContext.setAuthentication(authentication); |
|
|
|
securityContext.setAuthentication(authentication); |
|
|
|
save(securityContext, request); |
|
|
|
save(securityContext, request); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -790,8 +806,6 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
private static final class TestSecurityContextHolderPostProcessor extends SecurityContextRequestPostProcessorSupport |
|
|
|
private static final class TestSecurityContextHolderPostProcessor extends SecurityContextRequestPostProcessorSupport |
|
|
|
implements RequestPostProcessor { |
|
|
|
implements RequestPostProcessor { |
|
|
|
|
|
|
|
|
|
|
|
private SecurityContext EMPTY = SecurityContextHolder.createEmptyContext(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) { |
|
|
|
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) { |
|
|
|
// TestSecurityContextHolder is only a default value
|
|
|
|
// TestSecurityContextHolder is only a default value
|
|
|
|
@ -799,8 +813,10 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
if (existingContext != null) { |
|
|
|
if (existingContext != null) { |
|
|
|
return request; |
|
|
|
return request; |
|
|
|
} |
|
|
|
} |
|
|
|
SecurityContext context = TestSecurityContextHolder.getContext(); |
|
|
|
SecurityContextHolderStrategy strategy = getSecurityContextHolderStrategy(request); |
|
|
|
if (!this.EMPTY.equals(context)) { |
|
|
|
SecurityContext empty = strategy.createEmptyContext(); |
|
|
|
|
|
|
|
SecurityContext context = strategy.getContext(); |
|
|
|
|
|
|
|
if (!empty.equals(context)) { |
|
|
|
save(context, request); |
|
|
|
save(context, request); |
|
|
|
} |
|
|
|
} |
|
|
|
return request; |
|
|
|
return request; |
|
|
|
@ -851,7 +867,7 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) { |
|
|
|
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) { |
|
|
|
SecurityContext context = SecurityContextHolder.createEmptyContext(); |
|
|
|
SecurityContext context = getSecurityContextHolderStrategy(request).createEmptyContext(); |
|
|
|
context.setAuthentication(this.authentication); |
|
|
|
context.setAuthentication(this.authentication); |
|
|
|
save(this.authentication, request); |
|
|
|
save(this.authentication, request); |
|
|
|
return request; |
|
|
|
return request; |
|
|
|
@ -869,7 +885,7 @@ public final class SecurityMockMvcRequestPostProcessors { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private static final class UserDetailsRequestPostProcessor implements RequestPostProcessor { |
|
|
|
private static final class UserDetailsRequestPostProcessor implements RequestPostProcessor { |
|
|
|
|
|
|
|
|
|
|
|
private final RequestPostProcessor delegate; |
|
|
|
private final AuthenticationRequestPostProcessor delegate; |
|
|
|
|
|
|
|
|
|
|
|
UserDetailsRequestPostProcessor(UserDetails user) { |
|
|
|
UserDetailsRequestPostProcessor(UserDetails user) { |
|
|
|
Authentication token = UsernamePasswordAuthenticationToken.authenticated(user, user.getPassword(), |
|
|
|
Authentication token = UsernamePasswordAuthenticationToken.authenticated(user, user.getPassword(), |
|
|
|
|