Require Locale argument for toLower/toUpperCase usage
This commit is contained in:
		
							parent
							
								
									e86d88d0cf
								
							
						
					
					
						commit
						0eaffb37e7
					
				| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.cas.userdetails;
 | 
			
		|||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.jasig.cas.client.validation.Assertion;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +74,8 @@ public final class GrantedAuthorityFromAssertionAttributesUserDetailsService
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	private SimpleGrantedAuthority createSimpleGrantedAuthority(Object o) {
 | 
			
		||||
		return new SimpleGrantedAuthority(this.convertToUpperCase ? o.toString().toUpperCase() : o.toString());
 | 
			
		||||
		return new SimpleGrantedAuthority(
 | 
			
		||||
				this.convertToUpperCase ? o.toString().toUpperCase(Locale.ROOT) : o.toString());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2021 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.config.http;
 | 
			
		|||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.ServletRequest;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +287,7 @@ class HttpConfigurationBuilder {
 | 
			
		|||
 | 
			
		||||
	// Needed to account for placeholders
 | 
			
		||||
	static String createPath(String path, boolean lowerCase) {
 | 
			
		||||
		return lowerCase ? path.toLowerCase() : path;
 | 
			
		||||
		return lowerCase ? path.toLowerCase(Locale.ENGLISH) : path;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	BeanReference getSecurityContextRepositoryForAuthenticationFilters() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -79,10 +79,10 @@ public class SimpleAttributes2GrantedAuthoritiesMapper
 | 
			
		|||
	 */
 | 
			
		||||
	private GrantedAuthority getGrantedAuthority(String attribute) {
 | 
			
		||||
		if (isConvertAttributeToLowerCase()) {
 | 
			
		||||
			attribute = attribute.toLowerCase(Locale.getDefault());
 | 
			
		||||
			attribute = attribute.toLowerCase(Locale.ROOT);
 | 
			
		||||
		}
 | 
			
		||||
		else if (isConvertAttributeToUpperCase()) {
 | 
			
		||||
			attribute = attribute.toUpperCase(Locale.getDefault());
 | 
			
		||||
			attribute = attribute.toUpperCase(Locale.ROOT);
 | 
			
		||||
		}
 | 
			
		||||
		if (isAddPrefixIfAlreadyExisting() || !attribute.startsWith(getAttributePrefix())) {
 | 
			
		||||
			return new SimpleGrantedAuthority(getAttributePrefix() + attribute);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.core.authority.mapping;
 | 
			
		|||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.InitializingBean;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,10 +72,10 @@ public final class SimpleAuthorityMapper implements GrantedAuthoritiesMapper, In
 | 
			
		|||
 | 
			
		||||
	private GrantedAuthority mapAuthority(String name) {
 | 
			
		||||
		if (this.convertToUpperCase) {
 | 
			
		||||
			name = name.toUpperCase();
 | 
			
		||||
			name = name.toUpperCase(Locale.ROOT);
 | 
			
		||||
		}
 | 
			
		||||
		else if (this.convertToLowerCase) {
 | 
			
		||||
			name = name.toLowerCase();
 | 
			
		||||
			name = name.toLowerCase(Locale.ROOT);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.prefix.length() > 0 && !name.startsWith(this.prefix)) {
 | 
			
		||||
			name = this.prefix + name;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2017 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.core.userdetails;
 | 
			
		|||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +92,7 @@ public class MapReactiveUserDetailsService implements ReactiveUserDetailsService
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	private String getKey(String username) {
 | 
			
		||||
		return username.toLowerCase();
 | 
			
		||||
		return username.toLowerCase(Locale.ROOT);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package org.springframework.security.core.userdetails.memory;
 | 
			
		|||
import java.beans.PropertyEditorSupport;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.springframework.util.StringUtils;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,10 +46,10 @@ public class UserAttributeEditor extends PropertyEditorSupport {
 | 
			
		|||
				userAttrib.setPassword(currentToken);
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				if (currentToken.toLowerCase().equals("enabled")) {
 | 
			
		||||
				if (currentToken.toLowerCase(Locale.ENGLISH).equals("enabled")) {
 | 
			
		||||
					userAttrib.setEnabled(true);
 | 
			
		||||
				}
 | 
			
		||||
				else if (currentToken.toLowerCase().equals("disabled")) {
 | 
			
		||||
				else if (currentToken.toLowerCase(Locale.ENGLISH).equals("disabled")) {
 | 
			
		||||
					userAttrib.setEnabled(false);
 | 
			
		||||
				}
 | 
			
		||||
				else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2022 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package org.springframework.security.provisioning;
 | 
			
		|||
import java.util.Collection;
 | 
			
		||||
import java.util.Enumeration;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -92,23 +93,23 @@ public class InMemoryUserDetailsManager implements UserDetailsManager, UserDetai
 | 
			
		|||
	@Override
 | 
			
		||||
	public void createUser(UserDetails user) {
 | 
			
		||||
		Assert.isTrue(!userExists(user.getUsername()), "user should not exist");
 | 
			
		||||
		this.users.put(user.getUsername().toLowerCase(), new MutableUser(user));
 | 
			
		||||
		this.users.put(user.getUsername().toLowerCase(Locale.ROOT), new MutableUser(user));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void deleteUser(String username) {
 | 
			
		||||
		this.users.remove(username.toLowerCase());
 | 
			
		||||
		this.users.remove(username.toLowerCase(Locale.ROOT));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void updateUser(UserDetails user) {
 | 
			
		||||
		Assert.isTrue(userExists(user.getUsername()), "user should exist");
 | 
			
		||||
		this.users.put(user.getUsername().toLowerCase(), new MutableUser(user));
 | 
			
		||||
		this.users.put(user.getUsername().toLowerCase(Locale.ROOT), new MutableUser(user));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean userExists(String username) {
 | 
			
		||||
		return this.users.containsKey(username.toLowerCase());
 | 
			
		||||
		return this.users.containsKey(username.toLowerCase(Locale.ROOT));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
| 
						 | 
				
			
			@ -139,14 +140,14 @@ public class InMemoryUserDetailsManager implements UserDetailsManager, UserDetai
 | 
			
		|||
	@Override
 | 
			
		||||
	public UserDetails updatePassword(UserDetails user, String newPassword) {
 | 
			
		||||
		String username = user.getUsername();
 | 
			
		||||
		MutableUserDetails mutableUser = this.users.get(username.toLowerCase());
 | 
			
		||||
		MutableUserDetails mutableUser = this.users.get(username.toLowerCase(Locale.ROOT));
 | 
			
		||||
		mutableUser.setPassword(newPassword);
 | 
			
		||||
		return mutableUser;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
 | 
			
		||||
		UserDetails user = this.users.get(username.toLowerCase());
 | 
			
		||||
		UserDetails user = this.users.get(username.toLowerCase(Locale.ROOT));
 | 
			
		||||
		if (user == null) {
 | 
			
		||||
			throw new UsernameNotFoundException(username);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2018 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.crypto.password;
 | 
			
		|||
 | 
			
		||||
import java.security.MessageDigest;
 | 
			
		||||
import java.util.Base64;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.springframework.security.crypto.codec.Utf8;
 | 
			
		||||
import org.springframework.security.crypto.keygen.BytesKeyGenerator;
 | 
			
		||||
| 
						 | 
				
			
			@ -50,11 +51,11 @@ public class LdapShaPasswordEncoder implements PasswordEncoder {
 | 
			
		|||
 | 
			
		||||
	private static final String SSHA_PREFIX = "{SSHA}";
 | 
			
		||||
 | 
			
		||||
	private static final String SSHA_PREFIX_LC = SSHA_PREFIX.toLowerCase();
 | 
			
		||||
	private static final String SSHA_PREFIX_LC = SSHA_PREFIX.toLowerCase(Locale.ENGLISH);
 | 
			
		||||
 | 
			
		||||
	private static final String SHA_PREFIX = "{SHA}";
 | 
			
		||||
 | 
			
		||||
	private static final String SHA_PREFIX_LC = SHA_PREFIX.toLowerCase();
 | 
			
		||||
	private static final String SHA_PREFIX_LC = SHA_PREFIX.toLowerCase(Locale.ENGLISH);
 | 
			
		||||
 | 
			
		||||
	private BytesKeyGenerator saltGenerator;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,4 +53,11 @@
 | 
			
		|||
	<suppress files="WithSecurityContextTestExecutionListenerTests\.java" checks="SpringMethodVisibility"/>
 | 
			
		||||
	<suppress files="AbstractOAuth2AuthorizationGrantRequestEntityConverter\.java" checks="SpringMethodVisibility"/>
 | 
			
		||||
	<suppress files="JoseHeader\.java" checks="SpringMethodVisibility"/>
 | 
			
		||||
 | 
			
		||||
	<!-- Lambdas that we can't replace with a method reference because a closure is required -->
 | 
			
		||||
	<suppress files="BearerTokenAuthenticationFilter\.java" checks="SpringLambda"/>
 | 
			
		||||
 | 
			
		||||
	<!-- Ignore String.toUpperCase() and String.toLowerCase() checks in tests -->
 | 
			
		||||
	<suppress files="[\\/]src[\\/]test[\\/]" checks="RegexpSinglelineJava" id="toLowerCaseWithoutLocale"/>
 | 
			
		||||
	<suppress files="[\\/]src[\\/]test[\\/]" checks="RegexpSinglelineJava" id="toUpperCaseWithoutLocale"/>
 | 
			
		||||
</suppressions>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,5 +23,21 @@
 | 
			
		|||
			<property name="message" value="Please use assertThatExceptionOfType." />
 | 
			
		||||
			<property name="ignoreComments" value="true" />
 | 
			
		||||
		</module>
 | 
			
		||||
		<module name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
 | 
			
		||||
			<property name="id" value="toLowerCaseWithoutLocale"/>
 | 
			
		||||
			<property name="format" value="\.toLowerCase\(\)"/>
 | 
			
		||||
			<property name="maximum" value="0"/>
 | 
			
		||||
			<property name="message"
 | 
			
		||||
					  value="String.toLowerCase() should be String.toLowerCase(Locale.ROOT) or String.toLowerCase(Locale.ENGLISH)"/>
 | 
			
		||||
			<property name="ignoreComments" value="true"/>
 | 
			
		||||
		</module>
 | 
			
		||||
		<module name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
 | 
			
		||||
			<property name="id" value="toUpperCaseWithoutLocale"/>
 | 
			
		||||
			<property name="format" value="\.toUpperCase\(\)"/>
 | 
			
		||||
			<property name="maximum" value="0"/>
 | 
			
		||||
			<property name="message"
 | 
			
		||||
					  value="String.toUpperCase() should be String.toUpperCase(Locale.ROOT) or String.toUpperCase(Locale.ENGLISH)"/>
 | 
			
		||||
			<property name="ignoreComments" value="true"/>
 | 
			
		||||
		</module>
 | 
			
		||||
	</module>
 | 
			
		||||
</module>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2005-2010 the original author or authors.
 | 
			
		||||
 * Copyright 2005-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,8 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.security.ldap;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.springframework.ldap.BadLdapGrammarException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +74,7 @@ final class LdapEncoder {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	protected static String toTwoCharHex(char c) {
 | 
			
		||||
		String raw = Integer.toHexString(c).toUpperCase();
 | 
			
		||||
		String raw = Integer.toHexString(c).toUpperCase(Locale.ENGLISH);
 | 
			
		||||
		return (raw.length() > 1) ? raw : "0" + raw;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2005-2010 the original author or authors.
 | 
			
		||||
 * Copyright 2005-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,8 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.security.ldap.authentication;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.springframework.ldap.BadLdapGrammarException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +74,7 @@ final class LdapEncoder {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	protected static String toTwoCharHex(char c) {
 | 
			
		||||
		String raw = Integer.toHexString(c).toUpperCase();
 | 
			
		||||
		String raw = Integer.toHexString(c).toUpperCase(Locale.ENGLISH);
 | 
			
		||||
		return (raw.length() > 1) ? raw : "0" + raw;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ import java.util.Collection;
 | 
			
		|||
import java.util.HashMap;
 | 
			
		||||
import java.util.Hashtable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.regex.Matcher;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
| 
						 | 
				
			
			@ -142,9 +143,9 @@ public final class ActiveDirectoryLdapAuthenticationProvider extends AbstractLda
 | 
			
		|||
	 */
 | 
			
		||||
	public ActiveDirectoryLdapAuthenticationProvider(String domain, String url, String rootDn) {
 | 
			
		||||
		Assert.isTrue(StringUtils.hasText(url), "Url cannot be empty");
 | 
			
		||||
		this.domain = StringUtils.hasText(domain) ? domain.toLowerCase() : null;
 | 
			
		||||
		this.domain = StringUtils.hasText(domain) ? domain.toLowerCase(Locale.ROOT) : null;
 | 
			
		||||
		this.url = url;
 | 
			
		||||
		this.rootDn = StringUtils.hasText(rootDn) ? rootDn.toLowerCase() : null;
 | 
			
		||||
		this.rootDn = StringUtils.hasText(rootDn) ? rootDn.toLowerCase(Locale.ROOT) : null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +154,7 @@ public final class ActiveDirectoryLdapAuthenticationProvider extends AbstractLda
 | 
			
		|||
	 */
 | 
			
		||||
	public ActiveDirectoryLdapAuthenticationProvider(String domain, String url) {
 | 
			
		||||
		Assert.isTrue(StringUtils.hasText(url), "Url cannot be empty");
 | 
			
		||||
		this.domain = StringUtils.hasText(domain) ? domain.toLowerCase() : null;
 | 
			
		||||
		this.domain = StringUtils.hasText(domain) ? domain.toLowerCase(Locale.ROOT) : null;
 | 
			
		||||
		this.url = url;
 | 
			
		||||
		this.rootDn = (this.domain != null) ? rootDnFromDomain(this.domain) : null;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -361,7 +362,7 @@ public final class ActiveDirectoryLdapAuthenticationProvider extends AbstractLda
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	String createBindPrincipal(String username) {
 | 
			
		||||
		if (this.domain == null || username.toLowerCase().endsWith(this.domain)) {
 | 
			
		||||
		if (this.domain == null || username.toLowerCase(Locale.ROOT).endsWith(this.domain)) {
 | 
			
		||||
			return username;
 | 
			
		||||
		}
 | 
			
		||||
		return username + "@" + this.domain;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ import java.util.ArrayList;
 | 
			
		|||
import java.util.Collection;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +180,7 @@ public class DefaultLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator
 | 
			
		|||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
			if (this.convertToUpperCase) {
 | 
			
		||||
				role = role.toUpperCase();
 | 
			
		||||
				role = role.toUpperCase(Locale.ROOT);
 | 
			
		||||
			}
 | 
			
		||||
			return new SimpleGrantedAuthority(this.rolePrefix + role);
 | 
			
		||||
		};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2018 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ import java.util.Collection;
 | 
			
		|||
import java.util.LinkedList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.ListIterator;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import javax.naming.Context;
 | 
			
		||||
import javax.naming.NameNotFoundException;
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +121,7 @@ public class LdapUserDetailsManager implements UserDetailsManager {
 | 
			
		|||
		NamingEnumeration<?> ne = roleAttr.getAll();
 | 
			
		||||
		Object group = ne.next();
 | 
			
		||||
		String role = group.toString();
 | 
			
		||||
		return new SimpleGrantedAuthority(this.rolePrefix + role.toUpperCase());
 | 
			
		||||
		return new SimpleGrantedAuthority(this.rolePrefix + role.toUpperCase(Locale.ROOT));
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	private String[] attributesToRetrieve;
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +284,7 @@ public class LdapUserDetailsManager implements UserDetailsManager {
 | 
			
		|||
	 */
 | 
			
		||||
	protected DistinguishedName buildGroupDn(String group) {
 | 
			
		||||
		DistinguishedName dn = new DistinguishedName(this.groupSearchBase);
 | 
			
		||||
		dn.add(this.groupRoleAttributeName, group.toLowerCase());
 | 
			
		||||
		dn.add(this.groupRoleAttributeName, group.toLowerCase(Locale.ROOT));
 | 
			
		||||
		return dn;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@
 | 
			
		|||
package org.springframework.security.ldap.userdetails;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.logging.Log;
 | 
			
		||||
import org.apache.commons.logging.LogFactory;
 | 
			
		||||
| 
						 | 
				
			
			@ -127,7 +128,7 @@ public class LdapUserDetailsMapper implements UserDetailsContextMapper {
 | 
			
		|||
	protected GrantedAuthority createAuthority(Object role) {
 | 
			
		||||
		if (role instanceof String) {
 | 
			
		||||
			if (this.convertToUpperCase) {
 | 
			
		||||
				role = ((String) role).toUpperCase();
 | 
			
		||||
				role = ((String) role).toUpperCase(Locale.ROOT);
 | 
			
		||||
			}
 | 
			
		||||
			return new SimpleGrantedAuthority(this.rolePrefix + role);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2014 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ package org.springframework.security.ldap.userdetails;
 | 
			
		|||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +194,7 @@ public class NestedLdapAuthoritiesPopulator extends DefaultLdapAuthoritiesPopula
 | 
			
		|||
			}
 | 
			
		||||
			for (String role : roles) {
 | 
			
		||||
				if (isConvertToUpperCase()) {
 | 
			
		||||
					role = role.toUpperCase();
 | 
			
		||||
					role = role.toUpperCase(Locale.ROOT);
 | 
			
		||||
				}
 | 
			
		||||
				role = getRolePrefix() + role;
 | 
			
		||||
				// if the group already exist, we will not search for it's parents again.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2020 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package org.springframework.security.oauth2.client.web.reactive.function.client;
 | 
			
		|||
import java.time.Duration;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
| 
						 | 
				
			
			@ -749,7 +750,7 @@ public final class ServerOAuth2AuthorizedClientExchangeFilterFunction implements
 | 
			
		|||
			// @formatter:off
 | 
			
		||||
			return Stream.of(wwwAuthenticateHeader)
 | 
			
		||||
					.filter((header) -> !StringUtils.isEmpty(header))
 | 
			
		||||
					.filter((header) -> header.toLowerCase().startsWith("bearer"))
 | 
			
		||||
					.filter((header) -> header.toLowerCase(Locale.ENGLISH).startsWith("bearer"))
 | 
			
		||||
					.map((header) -> header.substring("bearer".length()))
 | 
			
		||||
					.map((header) -> header.split(","))
 | 
			
		||||
					.flatMap(Stream::of)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2020 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package org.springframework.security.oauth2.client.web.reactive.function.client;
 | 
			
		|||
import java.time.Duration;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
| 
						 | 
				
			
			@ -720,7 +721,7 @@ public final class ServletOAuth2AuthorizedClientExchangeFilterFunction implement
 | 
			
		|||
		private Map<String, String> parseAuthParameters(String wwwAuthenticateHeader) {
 | 
			
		||||
			// @formatter:off
 | 
			
		||||
			return Stream.of(wwwAuthenticateHeader).filter((header) -> !StringUtils.isEmpty(header))
 | 
			
		||||
					.filter((header) -> header.toLowerCase().startsWith("bearer"))
 | 
			
		||||
					.filter((header) -> header.toLowerCase(Locale.ENGLISH).startsWith("bearer"))
 | 
			
		||||
					.map((header) -> header.substring("bearer".length()))
 | 
			
		||||
					.map((header) -> header.split(","))
 | 
			
		||||
					.flatMap(Stream::of)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2004-2010 the original author or authors.
 | 
			
		||||
 * Copyright 2004-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,7 @@
 | 
			
		|||
package org.springframework.security.taglibs.authz;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.ServletContext;
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +168,7 @@ public abstract class AbstractAuthorizeTag {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	public void setMethod(String method) {
 | 
			
		||||
		this.method = (method != null) ? method.toUpperCase() : null;
 | 
			
		||||
		this.method = (method != null) ? method.toUpperCase(Locale.ENGLISH) : null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings({ "unchecked", "rawtypes" })
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,8 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.security.web;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.ServletRequest;
 | 
			
		||||
 | 
			
		||||
import org.springframework.util.Assert;
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +47,7 @@ public class PortResolverImpl implements PortResolver {
 | 
			
		|||
	@Override
 | 
			
		||||
	public int getServerPort(ServletRequest request) {
 | 
			
		||||
		int serverPort = request.getServerPort();
 | 
			
		||||
		String scheme = request.getScheme().toLowerCase();
 | 
			
		||||
		String scheme = request.getScheme().toLowerCase(Locale.ENGLISH);
 | 
			
		||||
		Integer mappedPort = getMappedPort(serverPort, scheme);
 | 
			
		||||
		return (mappedPort != null) ? mappedPort : serverPort;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.security.web.util;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +50,7 @@ public final class UrlUtils {
 | 
			
		|||
	 */
 | 
			
		||||
	public static String buildFullRequestUrl(String scheme, String serverName, int serverPort, String requestURI,
 | 
			
		||||
			String queryString) {
 | 
			
		||||
		scheme = scheme.toLowerCase();
 | 
			
		||||
		scheme = scheme.toLowerCase(Locale.ENGLISH);
 | 
			
		||||
		StringBuilder url = new StringBuilder();
 | 
			
		||||
		url.append(scheme).append("://").append(serverName);
 | 
			
		||||
		// Only add port if not default
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2021 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,7 @@
 | 
			
		|||
package org.springframework.security.web.util.matcher;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +268,7 @@ public final class AntPathRequestMatcher implements RequestMatcher, RequestVaria
 | 
			
		|||
 | 
			
		||||
		private SubpathMatcher(String subpath, boolean caseSensitive) {
 | 
			
		||||
			Assert.isTrue(!subpath.contains("*"), "subpath cannot contain \"*\"");
 | 
			
		||||
			this.subpath = caseSensitive ? subpath : subpath.toLowerCase();
 | 
			
		||||
			this.subpath = caseSensitive ? subpath : subpath.toLowerCase(Locale.ROOT);
 | 
			
		||||
			this.length = subpath.length();
 | 
			
		||||
			this.caseSensitive = caseSensitive;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +276,7 @@ public final class AntPathRequestMatcher implements RequestMatcher, RequestVaria
 | 
			
		|||
		@Override
 | 
			
		||||
		public boolean matches(String path) {
 | 
			
		||||
			if (!this.caseSensitive) {
 | 
			
		||||
				path = path.toLowerCase();
 | 
			
		||||
				path = path.toLowerCase(Locale.ROOT);
 | 
			
		||||
			}
 | 
			
		||||
			return path.startsWith(this.subpath) && (path.length() == this.length || path.charAt(this.length) == '/');
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue