Skip to content

Commit f588f9f

Browse files
committed
Merge branch '6.0.x'
2 parents 04369cf + acf4872 commit f588f9f

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

core/src/main/java/org/springframework/security/authorization/AuthorityAuthorizationManager.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,15 @@ public void setRoleHierarchy(RoleHierarchy roleHierarchy) {
5757
/**
5858
* Creates an instance of {@link AuthorityAuthorizationManager} with the provided
5959
* authority.
60-
* @param role the authority to check for prefixed with "ROLE_"
60+
* @param role the authority to check for prefixed with "ROLE_". Role should not start
61+
* with "ROLE_" since it is automatically prepended already.
6162
* @param <T> the type of object being authorized
6263
* @return the new instance
6364
*/
6465
public static <T> AuthorityAuthorizationManager<T> hasRole(String role) {
6566
Assert.notNull(role, "role cannot be null");
67+
Assert.isTrue(!role.startsWith(ROLE_PREFIX), () -> role + " should not start with " + ROLE_PREFIX + " since "
68+
+ ROLE_PREFIX + " is automatically prepended when using hasRole. Consider using hasAuthority instead.");
6669
return hasAuthority(ROLE_PREFIX + role);
6770
}
6871

@@ -81,7 +84,8 @@ public static <T> AuthorityAuthorizationManager<T> hasAuthority(String authority
8184
/**
8285
* Creates an instance of {@link AuthorityAuthorizationManager} with the provided
8386
* authorities.
84-
* @param roles the authorities to check for prefixed with "ROLE_"
87+
* @param roles the authorities to check for prefixed with "ROLE_". Each role should
88+
* not start with "ROLE_" since it is automatically prepended already.
8589
* @param <T> the type of object being authorized
8690
* @return the new instance
8791
*/
@@ -120,7 +124,11 @@ public static <T> AuthorityAuthorizationManager<T> hasAnyAuthority(String... aut
120124
private static String[] toNamedRolesArray(String rolePrefix, String[] roles) {
121125
String[] result = new String[roles.length];
122126
for (int i = 0; i < roles.length; i++) {
123-
result[i] = rolePrefix + roles[i];
127+
String role = roles[i];
128+
Assert.isTrue(!role.startsWith(rolePrefix), () -> role + " should not start with " + rolePrefix + " since "
129+
+ rolePrefix
130+
+ " is automatically prepended when using hasAnyRole. Consider using hasAnyAuthority instead.");
131+
result[i] = rolePrefix + role;
124132
}
125133
return result;
126134
}

core/src/test/java/org/springframework/security/authorization/AuthorityAuthorizationManagerTests.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -44,6 +44,15 @@ public void hasRoleWhenNullThenException() {
4444
.withMessage("role cannot be null");
4545
}
4646

47+
@Test
48+
public void hasRoleWhenContainRoleWithRolePrefixThenException() {
49+
String ROLE_PREFIX = "ROLE_";
50+
String ROLE_USER = ROLE_PREFIX + "USER";
51+
assertThatIllegalArgumentException().isThrownBy(() -> AuthorityAuthorizationManager.hasRole(ROLE_USER))
52+
.withMessage(ROLE_USER + " should not start with " + ROLE_PREFIX + " since " + ROLE_PREFIX
53+
+ " is automatically prepended when using hasRole. Consider using hasAuthority instead.");
54+
}
55+
4756
@Test
4857
public void hasAuthorityWhenNullThenException() {
4958
assertThatIllegalArgumentException().isThrownBy(() -> AuthorityAuthorizationManager.hasAuthority(null))
@@ -76,6 +85,16 @@ public void hasAnyRoleWhenCustomRolePrefixNullThenException() {
7685
.withMessage("rolePrefix cannot be null");
7786
}
7887

88+
@Test
89+
public void hasAnyRoleWhenContainRoleWithRolePrefixThenException() {
90+
String ROLE_PREFIX = "ROLE_";
91+
String ROLE_USER = ROLE_PREFIX + "USER";
92+
assertThatIllegalArgumentException()
93+
.isThrownBy(() -> AuthorityAuthorizationManager.hasAnyRole(new String[] { ROLE_USER }))
94+
.withMessage(ROLE_USER + " should not start with " + ROLE_PREFIX + " since " + ROLE_PREFIX
95+
+ " is automatically prepended when using hasAnyRole. Consider using hasAnyAuthority instead.");
96+
}
97+
7998
@Test
8099
public void hasAnyAuthorityWhenNullThenException() {
81100
assertThatIllegalArgumentException().isThrownBy(() -> AuthorityAuthorizationManager.hasAnyAuthority(null))

0 commit comments

Comments
 (0)