mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-05-31 09:12:14 +00:00
Hide utility class constructors
Update all utility classes so that they have a private constructor. This prevents users from accidentally creating an instance, when they should just use the static methods directly. Issue gh-8945
This commit is contained in:
parent
8559447357
commit
01d90c9881
@ -30,7 +30,7 @@ import org.springframework.security.web.access.channel.ChannelDecisionManagerImp
|
|||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
*/
|
*/
|
||||||
public class ChannelAttributeFactory {
|
public final class ChannelAttributeFactory {
|
||||||
|
|
||||||
private static final String OPT_REQUIRES_HTTP = "http";
|
private static final String OPT_REQUIRES_HTTP = "http";
|
||||||
|
|
||||||
@ -38,6 +38,9 @@ public class ChannelAttributeFactory {
|
|||||||
|
|
||||||
private static final String OPT_ANY_CHANNEL = "any";
|
private static final String OPT_ANY_CHANNEL = "any";
|
||||||
|
|
||||||
|
private ChannelAttributeFactory() {
|
||||||
|
}
|
||||||
|
|
||||||
public static List<ConfigAttribute> createChannelAttributes(String requiredChannel) {
|
public static List<ConfigAttribute> createChannelAttributes(String requiredChannel) {
|
||||||
String channelConfigAttribute;
|
String channelConfigAttribute;
|
||||||
|
|
||||||
|
@ -37,6 +37,9 @@ final class OAuth2ClientBeanDefinitionParserUtils {
|
|||||||
|
|
||||||
private static final String ATT_AUTHORIZED_CLIENT_SERVICE_REF = "authorized-client-service-ref";
|
private static final String ATT_AUTHORIZED_CLIENT_SERVICE_REF = "authorized-client-service-ref";
|
||||||
|
|
||||||
|
private OAuth2ClientBeanDefinitionParserUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
static BeanMetadataElement getClientRegistrationRepository(Element element) {
|
static BeanMetadataElement getClientRegistrationRepository(Element element) {
|
||||||
BeanMetadataElement clientRegistrationRepository;
|
BeanMetadataElement clientRegistrationRepository;
|
||||||
String clientRegistrationRepositoryRef = element.getAttribute(ATT_CLIENT_REGISTRATION_REPOSITORY_REF);
|
String clientRegistrationRepositoryRef = element.getAttribute(ATT_CLIENT_REGISTRATION_REPOSITORY_REF);
|
||||||
|
@ -29,7 +29,10 @@ import org.springframework.security.saml2.credentials.Saml2X509Credential.Saml2X
|
|||||||
/**
|
/**
|
||||||
* Preconfigured SAML credentials for SAML integration tests.
|
* Preconfigured SAML credentials for SAML integration tests.
|
||||||
*/
|
*/
|
||||||
public class TestSaml2Credentials {
|
public final class TestSaml2Credentials {
|
||||||
|
|
||||||
|
private TestSaml2Credentials() {
|
||||||
|
}
|
||||||
|
|
||||||
static Saml2X509Credential verificationCertificate() {
|
static Saml2X509Credential verificationCertificate() {
|
||||||
String certificate = "-----BEGIN CERTIFICATE-----\n"
|
String certificate = "-----BEGIN CERTIFICATE-----\n"
|
||||||
|
@ -26,7 +26,10 @@ import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class ServerHttpSecurityConfigurationBuilder {
|
public final class ServerHttpSecurityConfigurationBuilder {
|
||||||
|
|
||||||
|
private ServerHttpSecurityConfigurationBuilder() {
|
||||||
|
}
|
||||||
|
|
||||||
public static ServerHttpSecurity http() {
|
public static ServerHttpSecurity http() {
|
||||||
return new ServerHttpSecurityConfiguration().httpSecurity();
|
return new ServerHttpSecurityConfiguration().httpSecurity();
|
||||||
|
@ -29,13 +29,15 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
*/
|
*/
|
||||||
public class SecurityFiltersAssertions {
|
public final class SecurityFiltersAssertions {
|
||||||
|
|
||||||
private static Collection<SecurityFilters> ordered = Arrays.asList(SecurityFilters.values());
|
private static Collection<SecurityFilters> ordered = Arrays.asList(SecurityFilters.values());
|
||||||
|
|
||||||
|
private SecurityFiltersAssertions() {
|
||||||
|
}
|
||||||
|
|
||||||
public static void assertEquals(List<String> filters) {
|
public static void assertEquals(List<String> filters) {
|
||||||
List<String> expected = ordered.stream().map(SecurityFilters::name).collect(Collectors.toList());
|
List<String> expected = ordered.stream().map(SecurityFilters::name).collect(Collectors.toList());
|
||||||
|
|
||||||
assertThat(filters).isEqualTo(expected);
|
assertThat(filters).isEqualTo(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ import org.springframework.expression.Expression;
|
|||||||
|
|
||||||
public final class ExpressionUtils {
|
public final class ExpressionUtils {
|
||||||
|
|
||||||
|
private ExpressionUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean evaluateAsBoolean(Expression expr, EvaluationContext ctx) {
|
public static boolean evaluateAsBoolean(Expression expr, EvaluationContext ctx) {
|
||||||
try {
|
try {
|
||||||
return expr.getValue(ctx, Boolean.class);
|
return expr.getValue(ctx, Boolean.class);
|
||||||
|
@ -38,7 +38,7 @@ import org.springframework.util.Assert;
|
|||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public class RsaKeyConverters {
|
public final class RsaKeyConverters {
|
||||||
|
|
||||||
private static final String DASHES = "-----";
|
private static final String DASHES = "-----";
|
||||||
|
|
||||||
@ -50,6 +50,9 @@ public class RsaKeyConverters {
|
|||||||
|
|
||||||
private static final String X509_PEM_FOOTER = DASHES + "END PUBLIC KEY" + DASHES;
|
private static final String X509_PEM_FOOTER = DASHES + "END PUBLIC KEY" + DASHES;
|
||||||
|
|
||||||
|
private RsaKeyConverters() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a {@link Converter} for converting a PEM-encoded PKCS#8 RSA Private Key
|
* Construct a {@link Converter} for converting a PEM-encoded PKCS#8 RSA Private Key
|
||||||
* into a {@link RSAPrivateKey}.
|
* into a {@link RSAPrivateKey}.
|
||||||
|
@ -30,7 +30,7 @@ import org.springframework.core.SpringVersion;
|
|||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
*/
|
*/
|
||||||
public class SpringSecurityCoreVersion {
|
public final class SpringSecurityCoreVersion {
|
||||||
|
|
||||||
private static final String DISABLE_CHECKS = SpringSecurityCoreVersion.class.getName().concat(".DISABLE_CHECKS");
|
private static final String DISABLE_CHECKS = SpringSecurityCoreVersion.class.getName().concat(".DISABLE_CHECKS");
|
||||||
|
|
||||||
@ -50,6 +50,9 @@ public class SpringSecurityCoreVersion {
|
|||||||
performVersionChecks();
|
performVersionChecks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SpringSecurityCoreVersion() {
|
||||||
|
}
|
||||||
|
|
||||||
public static String getVersion() {
|
public static String getVersion() {
|
||||||
Package pkg = SpringSecurityCoreVersion.class.getPackage();
|
Package pkg = SpringSecurityCoreVersion.class.getPackage();
|
||||||
return (pkg != null ? pkg.getImplementationVersion() : null);
|
return (pkg != null ? pkg.getImplementationVersion() : null);
|
||||||
|
@ -29,10 +29,13 @@ import org.springframework.security.core.Authentication;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class ReactiveSecurityContextHolder {
|
public final class ReactiveSecurityContextHolder {
|
||||||
|
|
||||||
private static final Class<?> SECURITY_CONTEXT_KEY = SecurityContext.class;
|
private static final Class<?> SECURITY_CONTEXT_KEY = SecurityContext.class;
|
||||||
|
|
||||||
|
private ReactiveSecurityContextHolder() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@code Mono<SecurityContext>} from Reactor {@link Context}
|
* Gets the {@code Mono<SecurityContext>} from Reactor {@link Context}
|
||||||
* @return the {@code Mono<SecurityContext>}
|
* @return the {@code Mono<SecurityContext>}
|
||||||
|
@ -29,6 +29,9 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
public final class FieldUtils {
|
public final class FieldUtils {
|
||||||
|
|
||||||
|
private FieldUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to locate the specified field on the class.
|
* Attempts to locate the specified field on the class.
|
||||||
* @param clazz the class definition containing the field
|
* @param clazz the class definition containing the field
|
||||||
|
@ -35,6 +35,9 @@ import org.springframework.util.Assert;
|
|||||||
*/
|
*/
|
||||||
public final class MethodInvocationUtils {
|
public final class MethodInvocationUtils {
|
||||||
|
|
||||||
|
private MethodInvocationUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a <code>MethodInvocation</code> for specified <code>methodName</code> on
|
* Generates a <code>MethodInvocation</code> for specified <code>methodName</code> on
|
||||||
* the passed object, using the <code>args</code> to locate the method.
|
* the passed object, using the <code>args</code> to locate the method.
|
||||||
|
@ -19,7 +19,10 @@ package org.springframework.security.access.annotation.sec2150;
|
|||||||
import org.springframework.aop.framework.ProxyFactory;
|
import org.springframework.aop.framework.ProxyFactory;
|
||||||
import org.springframework.security.access.intercept.method.MockMethodInvocation;
|
import org.springframework.security.access.intercept.method.MockMethodInvocation;
|
||||||
|
|
||||||
public class MethodInvocationFactory {
|
public final class MethodInvocationFactory {
|
||||||
|
|
||||||
|
private MethodInvocationFactory() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In order to reproduce the bug for SEC-2150, we must have a proxy object that
|
* In order to reproduce the bug for SEC-2150, we must have a proxy object that
|
||||||
|
@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package org.springframework.security.access.expression.method;
|
package org.springframework.security.access.expression.method;
|
||||||
|
|
||||||
public class SecurityRules {
|
public final class SecurityRules {
|
||||||
|
|
||||||
|
private SecurityRules() {
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean disallow() {
|
public static boolean disallow() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -27,8 +27,6 @@ public class FieldUtilsTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void gettingAndSettingProtectedFieldIsSuccessful() throws Exception {
|
public void gettingAndSettingProtectedFieldIsSuccessful() throws Exception {
|
||||||
new FieldUtils();
|
|
||||||
|
|
||||||
Object tc = new TestClass();
|
Object tc = new TestClass();
|
||||||
|
|
||||||
assertThat(FieldUtils.getProtectedFieldValue("protectedField", tc)).isEqualTo("x");
|
assertThat(FieldUtils.getProtectedFieldValue("protectedField", tc)).isEqualTo("x");
|
||||||
|
@ -33,8 +33,6 @@ public class MethodInvocationUtilsTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createFromClassReturnsMethodWithNoArgInfoForMethodWithNoArgs() {
|
public void createFromClassReturnsMethodWithNoArgInfoForMethodWithNoArgs() {
|
||||||
new MethodInvocationUtils();
|
|
||||||
|
|
||||||
MethodInvocation mi = MethodInvocationUtils.createFromClass(String.class, "length");
|
MethodInvocation mi = MethodInvocationUtils.createFromClass(String.class, "length");
|
||||||
assertThat(mi).isNotNull();
|
assertThat(mi).isNotNull();
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,15 @@ import org.bouncycastle.util.Arrays;
|
|||||||
* @author Simeon Macke
|
* @author Simeon Macke
|
||||||
* @since 5.3
|
* @since 5.3
|
||||||
*/
|
*/
|
||||||
class Argon2EncodingUtils {
|
final class Argon2EncodingUtils {
|
||||||
|
|
||||||
private static final Base64.Encoder b64encoder = Base64.getEncoder().withoutPadding();
|
private static final Base64.Encoder b64encoder = Base64.getEncoder().withoutPadding();
|
||||||
|
|
||||||
private static final Base64.Decoder b64decoder = Base64.getDecoder();
|
private static final Base64.Decoder b64decoder = Base64.getDecoder();
|
||||||
|
|
||||||
|
private Argon2EncodingUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encodes a raw Argon2-hash and its parameters into the standard Argon2-hash-string
|
* Encodes a raw Argon2-hash and its parameters into the standard Argon2-hash-string
|
||||||
* as specified in the reference implementation
|
* as specified in the reference implementation
|
||||||
|
@ -237,6 +237,9 @@ public final class Base64 {
|
|||||||
-9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 // Decimal 244 - 255
|
-9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 // Decimal 244 - 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private Base64() {
|
||||||
|
}
|
||||||
|
|
||||||
public static byte[] decode(byte[] bytes) {
|
public static byte[] decode(byte[] bytes) {
|
||||||
return decode(bytes, 0, bytes.length, NO_OPTIONS);
|
return decode(bytes, 0, bytes.length, NO_OPTIONS);
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,9 @@ public final class Hex {
|
|||||||
private static final char[] HEX = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
|
private static final char[] HEX = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
|
||||||
'f' };
|
'f' };
|
||||||
|
|
||||||
|
private Hex() {
|
||||||
|
}
|
||||||
|
|
||||||
public static char[] encode(byte[] bytes) {
|
public static char[] encode(byte[] bytes) {
|
||||||
final int nBytes = bytes.length;
|
final int nBytes = bytes.length;
|
||||||
char[] result = new char[2 * nBytes];
|
char[] result = new char[2 * nBytes];
|
||||||
|
@ -33,6 +33,9 @@ public final class Utf8 {
|
|||||||
|
|
||||||
private static final Charset CHARSET = StandardCharsets.UTF_8;
|
private static final Charset CHARSET = StandardCharsets.UTF_8;
|
||||||
|
|
||||||
|
private Utf8() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the bytes of the String in UTF-8 encoded form.
|
* Get the bytes of the String in UTF-8 encoded form.
|
||||||
*/
|
*/
|
||||||
|
@ -28,8 +28,6 @@ public class Base64Tests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBase64ReturnsTrueForValidBase64() {
|
public void isBase64ReturnsTrueForValidBase64() {
|
||||||
new Base64(); // unused
|
|
||||||
|
|
||||||
assertThat(Base64.isBase64(new byte[] { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D' })).isTrue();
|
assertThat(Base64.isBase64(new byte[] { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D' })).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,10 @@ import org.junit.AssumptionViolatedException;
|
|||||||
|
|
||||||
import org.springframework.security.crypto.encrypt.AesBytesEncryptor.CipherAlgorithm;
|
import org.springframework.security.crypto.encrypt.AesBytesEncryptor.CipherAlgorithm;
|
||||||
|
|
||||||
public class CryptoAssumptions {
|
public final class CryptoAssumptions {
|
||||||
|
|
||||||
|
private CryptoAssumptions() {
|
||||||
|
}
|
||||||
|
|
||||||
public static void assumeGCMJCE() {
|
public static void assumeGCMJCE() {
|
||||||
assumeAes256(CipherAlgorithm.GCM);
|
assumeAes256(CipherAlgorithm.GCM);
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
|
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
|
||||||
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
||||||
<suppressions>
|
<suppressions>
|
||||||
<suppress files=".*" checks="SpringHideUtilityClassConstructor" />
|
|
||||||
<suppress files=".*" checks="SpringJavadoc" />
|
<suppress files=".*" checks="SpringJavadoc" />
|
||||||
<suppress files=".*" checks="SpringLambda" />
|
<suppress files=".*" checks="SpringLambda" />
|
||||||
<suppress files=".*" checks="SpringMethodOrder" />
|
<suppress files=".*" checks="SpringMethodOrder" />
|
||||||
|
@ -29,10 +29,13 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
*/
|
*/
|
||||||
public class PasswordPolicyControlExtractor {
|
public final class PasswordPolicyControlExtractor {
|
||||||
|
|
||||||
private static final Log logger = LogFactory.getLog(PasswordPolicyControlExtractor.class);
|
private static final Log logger = LogFactory.getLog(PasswordPolicyControlExtractor.class);
|
||||||
|
|
||||||
|
private PasswordPolicyControlExtractor() {
|
||||||
|
}
|
||||||
|
|
||||||
public static PasswordPolicyResponseControl extractControl(DirContext dirCtx) {
|
public static PasswordPolicyResponseControl extractControl(DirContext dirCtx) {
|
||||||
LdapContext ctx = (LdapContext) dirCtx;
|
LdapContext ctx = (LdapContext) dirCtx;
|
||||||
Control[] ctrls = null;
|
Control[] ctrls = null;
|
||||||
|
@ -40,6 +40,9 @@ final class OAuth2AuthorizationGrantRequestEntityUtils {
|
|||||||
|
|
||||||
private static HttpHeaders DEFAULT_TOKEN_REQUEST_HEADERS = getDefaultTokenRequestHeaders();
|
private static HttpHeaders DEFAULT_TOKEN_REQUEST_HEADERS = getDefaultTokenRequestHeaders();
|
||||||
|
|
||||||
|
private OAuth2AuthorizationGrantRequestEntityUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
static HttpHeaders getTokenRequestHeaders(ClientRegistration clientRegistration) {
|
static HttpHeaders getTokenRequestHeaders(ClientRegistration clientRegistration) {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.addAll(DEFAULT_TOKEN_REQUEST_HEADERS);
|
headers.addAll(DEFAULT_TOKEN_REQUEST_HEADERS);
|
||||||
|
@ -25,7 +25,10 @@ import org.springframework.security.oauth2.core.user.TestOAuth2Users;
|
|||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthenticationTokens {
|
public final class TestOAuth2AuthenticationTokens {
|
||||||
|
|
||||||
|
private TestOAuth2AuthenticationTokens() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthenticationToken authenticated() {
|
public static OAuth2AuthenticationToken authenticated() {
|
||||||
DefaultOAuth2User principal = TestOAuth2Users.create();
|
DefaultOAuth2User principal = TestOAuth2Users.create();
|
||||||
|
@ -29,7 +29,10 @@ import org.springframework.security.oauth2.core.endpoint.TestOAuth2Authorization
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthorizationCodeAuthenticationTokens {
|
public final class TestOAuth2AuthorizationCodeAuthenticationTokens {
|
||||||
|
|
||||||
|
private TestOAuth2AuthorizationCodeAuthenticationTokens() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthorizationCodeAuthenticationToken unauthenticated() {
|
public static OAuth2AuthorizationCodeAuthenticationToken unauthenticated() {
|
||||||
ClientRegistration registration = TestClientRegistrations.clientRegistration().build();
|
ClientRegistration registration = TestClientRegistrations.clientRegistration().build();
|
||||||
|
@ -23,7 +23,10 @@ import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestClientRegistrations {
|
public final class TestClientRegistrations {
|
||||||
|
|
||||||
|
private TestClientRegistrations() {
|
||||||
|
}
|
||||||
|
|
||||||
public static ClientRegistration.Builder clientRegistration() {
|
public static ClientRegistration.Builder clientRegistration() {
|
||||||
return ClientRegistration.withRegistrationId("registration-id")
|
return ClientRegistration.withRegistrationId("registration-id")
|
||||||
|
@ -45,6 +45,9 @@ final class HttpMessageConverters {
|
|||||||
jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
|
jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private HttpMessageConverters() {
|
||||||
|
}
|
||||||
|
|
||||||
static GenericHttpMessageConverter<Object> getJsonMessageConverter() {
|
static GenericHttpMessageConverter<Object> getJsonMessageConverter() {
|
||||||
if (jackson2Present) {
|
if (jackson2Present) {
|
||||||
return new MappingJackson2HttpMessageConverter();
|
return new MappingJackson2HttpMessageConverter();
|
||||||
|
@ -25,7 +25,10 @@ import java.util.HashSet;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AccessTokens {
|
public final class TestOAuth2AccessTokens {
|
||||||
|
|
||||||
|
private TestOAuth2AccessTokens() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AccessToken noScopes() {
|
public static OAuth2AccessToken noScopes() {
|
||||||
return new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, "no-scopes", Instant.now(),
|
return new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, "no-scopes", Instant.now(),
|
||||||
|
@ -22,7 +22,10 @@ import java.time.Instant;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2RefreshTokens {
|
public final class TestOAuth2RefreshTokens {
|
||||||
|
|
||||||
|
private TestOAuth2RefreshTokens() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2RefreshToken refreshToken() {
|
public static OAuth2RefreshToken refreshToken() {
|
||||||
return new OAuth2RefreshToken("refresh-token", Instant.now());
|
return new OAuth2RefreshToken("refresh-token", Instant.now());
|
||||||
|
@ -26,7 +26,10 @@ import org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AccessTokenResponses {
|
public final class TestOAuth2AccessTokenResponses {
|
||||||
|
|
||||||
|
private TestOAuth2AccessTokenResponses() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AccessTokenResponse.Builder accessTokenResponse() {
|
public static OAuth2AccessTokenResponse.Builder accessTokenResponse() {
|
||||||
return OAuth2AccessTokenResponse.withToken("token").tokenType(OAuth2AccessToken.TokenType.BEARER);
|
return OAuth2AccessTokenResponse.withToken("token").tokenType(OAuth2AccessToken.TokenType.BEARER);
|
||||||
|
@ -21,7 +21,10 @@ package org.springframework.security.oauth2.core.endpoint;
|
|||||||
* @author Eddú Meléndez
|
* @author Eddú Meléndez
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthorizationExchanges {
|
public final class TestOAuth2AuthorizationExchanges {
|
||||||
|
|
||||||
|
private TestOAuth2AuthorizationExchanges() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthorizationExchange success() {
|
public static OAuth2AuthorizationExchange success() {
|
||||||
OAuth2AuthorizationRequest request = TestOAuth2AuthorizationRequests.request().build();
|
OAuth2AuthorizationRequest request = TestOAuth2AuthorizationRequests.request().build();
|
||||||
|
@ -23,7 +23,10 @@ import java.util.Map;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthorizationRequests {
|
public final class TestOAuth2AuthorizationRequests {
|
||||||
|
|
||||||
|
private TestOAuth2AuthorizationRequests() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthorizationRequest.Builder request() {
|
public static OAuth2AuthorizationRequest.Builder request() {
|
||||||
String registrationId = "registration-id";
|
String registrationId = "registration-id";
|
||||||
|
@ -20,7 +20,10 @@ package org.springframework.security.oauth2.core.endpoint;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthorizationResponses {
|
public final class TestOAuth2AuthorizationResponses {
|
||||||
|
|
||||||
|
private TestOAuth2AuthorizationResponses() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthorizationResponse.Builder success() {
|
public static OAuth2AuthorizationResponse.Builder success() {
|
||||||
return OAuth2AuthorizationResponse.success("authorization-code").state("state")
|
return OAuth2AuthorizationResponse.success("authorization-code").state("state")
|
||||||
|
@ -23,7 +23,10 @@ import java.time.Instant;
|
|||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
*/
|
*/
|
||||||
public class TestOidcIdTokens {
|
public final class TestOidcIdTokens {
|
||||||
|
|
||||||
|
private TestOidcIdTokens() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OidcIdToken.Builder idToken() {
|
public static OidcIdToken.Builder idToken() {
|
||||||
return OidcIdToken.withTokenValue("id-token").issuer("https://example.com").subject("subject")
|
return OidcIdToken.withTokenValue("id-token").issuer("https://example.com").subject("subject")
|
||||||
|
@ -30,7 +30,10 @@ import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
|
|||||||
/**
|
/**
|
||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
*/
|
*/
|
||||||
public class TestOidcUsers {
|
public final class TestOidcUsers {
|
||||||
|
|
||||||
|
private TestOidcUsers() {
|
||||||
|
}
|
||||||
|
|
||||||
public static DefaultOidcUser create() {
|
public static DefaultOidcUser create() {
|
||||||
OidcIdToken idToken = idToken();
|
OidcIdToken idToken = idToken();
|
||||||
|
@ -28,7 +28,10 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|||||||
/**
|
/**
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2Users {
|
public final class TestOAuth2Users {
|
||||||
|
|
||||||
|
private TestOAuth2Users() {
|
||||||
|
}
|
||||||
|
|
||||||
public static DefaultOAuth2User create() {
|
public static DefaultOAuth2User create() {
|
||||||
String nameAttributeKey = "username";
|
String nameAttributeKey = "username";
|
||||||
|
@ -38,7 +38,7 @@ import org.springframework.web.util.UriComponentsBuilder;
|
|||||||
* @author Rafiullah Hamedy
|
* @author Rafiullah Hamedy
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
class JwtDecoderProviderConfigurationUtils {
|
final class JwtDecoderProviderConfigurationUtils {
|
||||||
|
|
||||||
private static final String OIDC_METADATA_PATH = "/.well-known/openid-configuration";
|
private static final String OIDC_METADATA_PATH = "/.well-known/openid-configuration";
|
||||||
|
|
||||||
@ -49,6 +49,9 @@ class JwtDecoderProviderConfigurationUtils {
|
|||||||
private static final ParameterizedTypeReference<Map<String, Object>> typeReference = new ParameterizedTypeReference<Map<String, Object>>() {
|
private static final ParameterizedTypeReference<Map<String, Object>> typeReference = new ParameterizedTypeReference<Map<String, Object>>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private JwtDecoderProviderConfigurationUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
static Map<String, Object> getConfigurationForOidcIssuerLocation(String oidcIssuerLocation) {
|
static Map<String, Object> getConfigurationForOidcIssuerLocation(String oidcIssuerLocation) {
|
||||||
return getConfiguration(oidcIssuerLocation, oidc(URI.create(oidcIssuerLocation)));
|
return getConfiguration(oidcIssuerLocation, oidc(URI.create(oidcIssuerLocation)));
|
||||||
}
|
}
|
||||||
|
@ -32,10 +32,9 @@ import javax.crypto.spec.SecretKeySpec;
|
|||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public class TestKeys {
|
public final class TestKeys {
|
||||||
|
|
||||||
public static final KeyFactory kf;
|
public static final KeyFactory kf;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
kf = KeyFactory.getInstance("RSA");
|
kf = KeyFactory.getInstance("RSA");
|
||||||
@ -57,12 +56,11 @@ public class TestKeys {
|
|||||||
+ "kJdJ/ZIV+WW4noDdzpKqHcwmB8FsrumlVY/DNVvUSDIipiq9PbP4H99TXN1o746o"
|
+ "kJdJ/ZIV+WW4noDdzpKqHcwmB8FsrumlVY/DNVvUSDIipiq9PbP4H99TXN1o746o"
|
||||||
+ "RaNa07rq1hoCgMSSy+85SagCoxlmyE+D+of9SsMY8Ol9t0rdzpobBuhyJ/o5dfvj" + "KwIDAQAB";
|
+ "RaNa07rq1hoCgMSSy+85SagCoxlmyE+D+of9SsMY8Ol9t0rdzpobBuhyJ/o5dfvj" + "KwIDAQAB";
|
||||||
|
|
||||||
public static final RSAPublicKey DEFAULT_PUBLIC_KEY = publicKey();
|
public static final RSAPublicKey DEFAULT_PUBLIC_KEY;
|
||||||
|
static {
|
||||||
private static RSAPublicKey publicKey() {
|
|
||||||
X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.getDecoder().decode(DEFAULT_RSA_PUBLIC_KEY));
|
X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.getDecoder().decode(DEFAULT_RSA_PUBLIC_KEY));
|
||||||
try {
|
try {
|
||||||
return (RSAPublicKey) kf.generatePublic(spec);
|
DEFAULT_PUBLIC_KEY = (RSAPublicKey) kf.generatePublic(spec);
|
||||||
}
|
}
|
||||||
catch (InvalidKeySpecException ex) {
|
catch (InvalidKeySpecException ex) {
|
||||||
throw new IllegalArgumentException(ex);
|
throw new IllegalArgumentException(ex);
|
||||||
@ -95,16 +93,19 @@ public class TestKeys {
|
|||||||
+ "c5TVvhG/ubfBspI5DhQqIGijnVBzFT//UfIYMSKJo75qqBEyP2EJSmCsunWsAFsM"
|
+ "c5TVvhG/ubfBspI5DhQqIGijnVBzFT//UfIYMSKJo75qqBEyP2EJSmCsunWsAFsM"
|
||||||
+ "TszuiGTkrKcZy9G0wJqPztZZl2F2+bJgnA6nBEV7g5PA4Af+QSmaIhRwqGDAuROR" + "47jndeyIaMTNETEmOnms+as17g==";
|
+ "TszuiGTkrKcZy9G0wJqPztZZl2F2+bJgnA6nBEV7g5PA4Af+QSmaIhRwqGDAuROR" + "47jndeyIaMTNETEmOnms+as17g==";
|
||||||
|
|
||||||
public static final RSAPrivateKey DEFAULT_PRIVATE_KEY = privateKey();
|
public static final RSAPrivateKey DEFAULT_PRIVATE_KEY;
|
||||||
|
|
||||||
private static RSAPrivateKey privateKey() {
|
static {
|
||||||
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(DEFAULT_RSA_PRIVATE_KEY));
|
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(DEFAULT_RSA_PRIVATE_KEY));
|
||||||
try {
|
try {
|
||||||
return (RSAPrivateKey) kf.generatePrivate(spec);
|
DEFAULT_PRIVATE_KEY = (RSAPrivateKey) kf.generatePrivate(spec);
|
||||||
}
|
}
|
||||||
catch (InvalidKeySpecException ex) {
|
catch (InvalidKeySpecException ex) {
|
||||||
throw new IllegalArgumentException(ex);
|
throw new IllegalArgumentException(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TestKeys() {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,10 @@ package org.springframework.security.oauth2.jwt;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class TestJwts {
|
public final class TestJwts {
|
||||||
|
|
||||||
|
private TestJwts() {
|
||||||
|
}
|
||||||
|
|
||||||
public static Jwt.Builder jwt() {
|
public static Jwt.Builder jwt() {
|
||||||
return Jwt.withTokenValue("token").header("alg", "none").audience(Arrays.asList("https://audience.example.org"))
|
return Jwt.withTokenValue("token").header("alg", "none").audience(Arrays.asList("https://audience.example.org"))
|
||||||
|
@ -36,7 +36,10 @@ import org.springframework.security.oauth2.server.resource.introspection.OAuth2I
|
|||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
*/
|
*/
|
||||||
public class TestOAuth2AuthenticatedPrincipals {
|
public final class TestOAuth2AuthenticatedPrincipals {
|
||||||
|
|
||||||
|
private TestOAuth2AuthenticatedPrincipals() {
|
||||||
|
}
|
||||||
|
|
||||||
public static OAuth2AuthenticatedPrincipal active() {
|
public static OAuth2AuthenticatedPrincipal active() {
|
||||||
return active(attributes -> {
|
return active(attributes -> {
|
||||||
|
@ -33,7 +33,10 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
|
|||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
*/
|
*/
|
||||||
public class TestBearerTokenAuthentications {
|
public final class TestBearerTokenAuthentications {
|
||||||
|
|
||||||
|
private TestBearerTokenAuthentications() {
|
||||||
|
}
|
||||||
|
|
||||||
public static BearerTokenAuthentication bearer() {
|
public static BearerTokenAuthentication bearer() {
|
||||||
Collection<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("SCOPE_USER");
|
Collection<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("SCOPE_USER");
|
||||||
|
@ -74,12 +74,15 @@ import org.springframework.security.saml2.Saml2Exception;
|
|||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
* @since 5.4
|
* @since 5.4
|
||||||
*/
|
*/
|
||||||
public class OpenSamlInitializationService {
|
public final class OpenSamlInitializationService {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(OpenSamlInitializationService.class);
|
private static final Log log = LogFactory.getLog(OpenSamlInitializationService.class);
|
||||||
|
|
||||||
private static final AtomicBoolean initialized = new AtomicBoolean(false);
|
private static final AtomicBoolean initialized = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
private OpenSamlInitializationService() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ready OpenSAML for use and configure it with reasonable defaults.
|
* Ready OpenSAML for use and configure it with reasonable defaults.
|
||||||
*
|
*
|
||||||
|
@ -35,6 +35,9 @@ final class Saml2Utils {
|
|||||||
|
|
||||||
private static Base64 BASE64 = new Base64(0, new byte[] { '\n' });
|
private static Base64 BASE64 = new Base64(0, new byte[] { '\n' });
|
||||||
|
|
||||||
|
private Saml2Utils() {
|
||||||
|
}
|
||||||
|
|
||||||
static String samlEncode(byte[] b) {
|
static String samlEncode(byte[] b) {
|
||||||
return BASE64.encodeAsString(b);
|
return BASE64.encodeAsString(b);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,9 @@ public final class RelyingPartyRegistrations {
|
|||||||
private static final RestOperations rest = new RestTemplate(
|
private static final RestOperations rest = new RestTemplate(
|
||||||
Arrays.asList(new OpenSamlRelyingPartyRegistrationBuilderHttpMessageConverter()));
|
Arrays.asList(new OpenSamlRelyingPartyRegistrationBuilderHttpMessageConverter()));
|
||||||
|
|
||||||
|
private RelyingPartyRegistrations() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a {@link RelyingPartyRegistration.Builder} based off of the given SAML 2.0
|
* Return a {@link RelyingPartyRegistration.Builder} based off of the given SAML 2.0
|
||||||
* Asserting Party (IDP) metadata.
|
* Asserting Party (IDP) metadata.
|
||||||
|
@ -34,6 +34,9 @@ final class Saml2ServletUtils {
|
|||||||
|
|
||||||
private static final char PATH_DELIMITER = '/';
|
private static final char PATH_DELIMITER = '/';
|
||||||
|
|
||||||
|
private Saml2ServletUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
static String resolveUrlTemplate(String template, String baseUrl, RelyingPartyRegistration relyingParty) {
|
static String resolveUrlTemplate(String template, String baseUrl, RelyingPartyRegistration relyingParty) {
|
||||||
if (!StringUtils.hasText(template)) {
|
if (!StringUtils.hasText(template)) {
|
||||||
return baseUrl;
|
return baseUrl;
|
||||||
|
@ -32,6 +32,9 @@ public final class Saml2Utils {
|
|||||||
|
|
||||||
private static Base64 BASE64 = new Base64(0, new byte[] { '\n' });
|
private static Base64 BASE64 = new Base64(0, new byte[] { '\n' });
|
||||||
|
|
||||||
|
private Saml2Utils() {
|
||||||
|
}
|
||||||
|
|
||||||
public static String samlEncode(byte[] b) {
|
public static String samlEncode(byte[] b) {
|
||||||
return BASE64.encodeAsString(b);
|
return BASE64.encodeAsString(b);
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,9 @@ import org.springframework.security.saml2.core.Saml2X509Credential.Saml2X509Cred
|
|||||||
|
|
||||||
public final class TestSaml2X509Credentials {
|
public final class TestSaml2X509Credentials {
|
||||||
|
|
||||||
|
private TestSaml2X509Credentials() {
|
||||||
|
}
|
||||||
|
|
||||||
public static Saml2X509Credential assertingPartySigningCredential() {
|
public static Saml2X509Credential assertingPartySigningCredential() {
|
||||||
return new Saml2X509Credential(idpPrivateKey(), idpCertificate(), Saml2X509CredentialType.SIGNING);
|
return new Saml2X509Credential(idpPrivateKey(), idpCertificate(), Saml2X509CredentialType.SIGNING);
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,9 @@ import org.springframework.security.saml2.credentials.Saml2X509Credential.Saml2X
|
|||||||
|
|
||||||
public final class TestSaml2X509Credentials {
|
public final class TestSaml2X509Credentials {
|
||||||
|
|
||||||
|
private TestSaml2X509Credentials() {
|
||||||
|
}
|
||||||
|
|
||||||
public static Saml2X509Credential assertingPartySigningCredential() {
|
public static Saml2X509Credential assertingPartySigningCredential() {
|
||||||
return new Saml2X509Credential(idpPrivateKey(), idpCertificate(), Saml2X509CredentialType.SIGNING);
|
return new Saml2X509Credential(idpPrivateKey(), idpCertificate(), Saml2X509CredentialType.SIGNING);
|
||||||
}
|
}
|
||||||
|
@ -97,6 +97,9 @@ final class TestOpenSamlObjects {
|
|||||||
private static SecretKey SECRET_KEY = new SecretKeySpec(
|
private static SecretKey SECRET_KEY = new SecretKeySpec(
|
||||||
Base64.getDecoder().decode("shOnwNMoCv88HKMEa91+FlYoD5RNvzMTAL5LGxZKIFk="), "AES");
|
Base64.getDecoder().decode("shOnwNMoCv88HKMEa91+FlYoD5RNvzMTAL5LGxZKIFk="), "AES");
|
||||||
|
|
||||||
|
private TestOpenSamlObjects() {
|
||||||
|
}
|
||||||
|
|
||||||
static Response response() {
|
static Response response() {
|
||||||
return response(DESTINATION, ASSERTING_PARTY_ENTITY_ID);
|
return response(DESTINATION, ASSERTING_PARTY_ENTITY_ID);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,10 @@ import org.springframework.security.saml2.provider.service.registration.TestRely
|
|||||||
/**
|
/**
|
||||||
* Test {@link Saml2AuthenticationRequestContext}s
|
* Test {@link Saml2AuthenticationRequestContext}s
|
||||||
*/
|
*/
|
||||||
public class TestSaml2AuthenticationRequestContexts {
|
public final class TestSaml2AuthenticationRequestContexts {
|
||||||
|
|
||||||
|
private TestSaml2AuthenticationRequestContexts() {
|
||||||
|
}
|
||||||
|
|
||||||
public static Saml2AuthenticationRequestContext.Builder authenticationRequestContext() {
|
public static Saml2AuthenticationRequestContext.Builder authenticationRequestContext() {
|
||||||
return Saml2AuthenticationRequestContext.builder().relayState("relayState").issuer("issuer")
|
return Saml2AuthenticationRequestContext.builder().relayState("relayState").issuer("issuer")
|
||||||
|
@ -23,7 +23,10 @@ import org.springframework.security.saml2.provider.service.servlet.filter.Saml2W
|
|||||||
/**
|
/**
|
||||||
* Preconfigured test data for {@link RelyingPartyRegistration} objects
|
* Preconfigured test data for {@link RelyingPartyRegistration} objects
|
||||||
*/
|
*/
|
||||||
public class TestRelyingPartyRegistrations {
|
public final class TestRelyingPartyRegistrations {
|
||||||
|
|
||||||
|
private TestRelyingPartyRegistrations() {
|
||||||
|
}
|
||||||
|
|
||||||
public static RelyingPartyRegistration.Builder relyingPartyRegistration() {
|
public static RelyingPartyRegistration.Builder relyingPartyRegistration() {
|
||||||
String registrationId = "simplesamlphp";
|
String registrationId = "simplesamlphp";
|
||||||
|
@ -51,6 +51,9 @@ public final class TagLibConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TagLibConfig() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns EVAL_BODY_INCLUDE if the authorized flag is true or UI security has been
|
* Returns EVAL_BODY_INCLUDE if the authorized flag is true or UI security has been
|
||||||
* disabled. Otherwise returns SKIP_BODY.
|
* disabled. Otherwise returns SKIP_BODY.
|
||||||
|
@ -97,7 +97,10 @@ import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class SecurityMockServerConfigurers {
|
public final class SecurityMockServerConfigurers {
|
||||||
|
|
||||||
|
private SecurityMockServerConfigurers() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up Spring Security's {@link WebTestClient} test support
|
* Sets up Spring Security's {@link WebTestClient} test support
|
||||||
|
@ -30,6 +30,9 @@ import org.springframework.util.Assert;
|
|||||||
*/
|
*/
|
||||||
public final class SecurityMockMvcConfigurers {
|
public final class SecurityMockMvcConfigurers {
|
||||||
|
|
||||||
|
private SecurityMockMvcConfigurers() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the MockMvcBuilder for use with Spring Security. Specifically the
|
* Configures the MockMvcBuilder for use with Spring Security. Specifically the
|
||||||
* configurer adds the Spring Bean named "springSecurityFilterChain" as a Filter. It
|
* configurer adds the Spring Bean named "springSecurityFilterChain" as a Filter. It
|
||||||
|
@ -52,4 +52,7 @@ public final class WebAttributes {
|
|||||||
public static final String WEB_INVOCATION_PRIVILEGE_EVALUATOR_ATTRIBUTE = WebAttributes.class.getName()
|
public static final String WEB_INVOCATION_PRIVILEGE_EVALUATOR_ATTRIBUTE = WebAttributes.class.getName()
|
||||||
+ ".WEB_INVOCATION_PRIVILEGE_EVALUATOR_ATTRIBUTE";
|
+ ".WEB_INVOCATION_PRIVILEGE_EVALUATOR_ATTRIBUTE";
|
||||||
|
|
||||||
|
private WebAttributes() {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,9 @@ final class DigestAuthUtils {
|
|||||||
|
|
||||||
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
||||||
|
|
||||||
|
private DigestAuthUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
static String encodePasswordInA1Format(String username, String realm, String password) {
|
static String encodePasswordInA1Format(String username, String realm, String password) {
|
||||||
String a1 = username + ":" + realm + ":" + password;
|
String a1 = username + ":" + realm + ":" + password;
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ import java.util.TimeZone;
|
|||||||
* @author Remy Maucherat
|
* @author Remy Maucherat
|
||||||
* @author Andrey Grebnev
|
* @author Andrey Grebnev
|
||||||
*/
|
*/
|
||||||
public class FastHttpDateFormat {
|
public final class FastHttpDateFormat {
|
||||||
|
|
||||||
/** HTTP date format. */
|
/** HTTP date format. */
|
||||||
protected static final SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
protected static final SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||||
@ -66,6 +66,9 @@ public class FastHttpDateFormat {
|
|||||||
/** Parser cache. */
|
/** Parser cache. */
|
||||||
protected static final HashMap<String, Long> parseCache = new HashMap<>();
|
protected static final HashMap<String, Long> parseCache = new HashMap<>();
|
||||||
|
|
||||||
|
private FastHttpDateFormat() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a specified date to HTTP format. If local format is not <code>null</code>,
|
* Formats a specified date to HTTP format. If local format is not <code>null</code>,
|
||||||
* it's used instead.
|
* it's used instead.
|
||||||
|
@ -30,6 +30,9 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
*/
|
*/
|
||||||
public final class UrlUtils {
|
public final class UrlUtils {
|
||||||
|
|
||||||
|
private UrlUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
public static String buildFullRequestUrl(HttpServletRequest r) {
|
public static String buildFullRequestUrl(HttpServletRequest r) {
|
||||||
return buildFullRequestUrl(r.getScheme(), r.getServerName(), r.getServerPort(), r.getRequestURI(),
|
return buildFullRequestUrl(r.getScheme(), r.getServerName(), r.getServerPort(), r.getRequestURI(),
|
||||||
r.getQueryString());
|
r.getQueryString());
|
||||||
|
@ -34,7 +34,10 @@ import org.springframework.web.server.WebFilter;
|
|||||||
* @since 5.0
|
* @since 5.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class WebTestClientBuilder {
|
public final class WebTestClientBuilder {
|
||||||
|
|
||||||
|
private WebTestClientBuilder() {
|
||||||
|
}
|
||||||
|
|
||||||
public static Builder bindToWebFilters(WebFilter... webFilters) {
|
public static Builder bindToWebFilters(WebFilter... webFilters) {
|
||||||
return WebTestClient.bindToController(new Http200RestController()).webFilter(webFilters).configureClient();
|
return WebTestClient.bindToController(new Http200RestController()).webFilter(webFilters).configureClient();
|
||||||
|
@ -25,7 +25,10 @@ import java.security.cert.X509Certificate;
|
|||||||
*
|
*
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
*/
|
*/
|
||||||
public class X509TestUtils {
|
public final class X509TestUtils {
|
||||||
|
|
||||||
|
private X509TestUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds an X.509 certificate. In human-readable form it is:
|
* Builds an X.509 certificate. In human-readable form it is:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user