Improvements and unit tests.
This commit is contained in:
parent
5e0ea6ce8a
commit
e1db108cb9
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2018 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,25 +16,41 @@
|
||||||
|
|
||||||
package org.springframework.security.oauth2.core;
|
package org.springframework.security.oauth2.core;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.springframework.security.authorization.AuthorityAuthorizationManager;
|
import org.springframework.security.authorization.AuthorityAuthorizationManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mario Petrovski
|
* @author Mario Petrovski
|
||||||
|
* @since 6.2
|
||||||
*/
|
*/
|
||||||
public final class ScopeAuthorizationManagerFactory {
|
public final class OAuth2AuthorizationManagers {
|
||||||
|
|
||||||
private ScopeAuthorizationManagerFactory() {
|
private OAuth2AuthorizationManagers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> AuthorityAuthorizationManager<T> hasScope(String scope) {
|
public static <T> AuthorityAuthorizationManager<T> hasScope(String scope) {
|
||||||
|
verifyScope(scope);
|
||||||
return AuthorityAuthorizationManager.hasAuthority("SCOPE_" + scope);
|
return AuthorityAuthorizationManager.hasAuthority("SCOPE_" + scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> AuthorityAuthorizationManager<T> hasAnyScope(String... scopes) {
|
public static <T> AuthorityAuthorizationManager<T> hasAnyScope(String... scopes) {
|
||||||
String[] mappedScopes = Arrays.stream(scopes).map((String s) -> "SCOPE_" + s).toArray(String[]::new);
|
verifyScopes(scopes);
|
||||||
|
String[] mappedScopes = new String[scopes.length];
|
||||||
|
for (int i = 0; i < scopes.length; i++) {
|
||||||
|
mappedScopes[i] = "SCOPE_" + scopes[i];
|
||||||
|
}
|
||||||
return AuthorityAuthorizationManager.hasAnyAuthority(mappedScopes);
|
return AuthorityAuthorizationManager.hasAnyAuthority(mappedScopes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void verifyScopes(String... scopes) throws IllegalArgumentException {
|
||||||
|
for (String scope : scopes) {
|
||||||
|
verifyScope(scope);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void verifyScope(String scope) {
|
||||||
|
if (scope.startsWith("SCOPE_")) {
|
||||||
|
throw new IllegalArgumentException("Scope '" + scope + "' start with 'SCOPE_' prefix.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2002-2023 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.security.oauth2.core;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.security.authorization.AuthorityAuthorizationManager;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link OAuth2AuthorizationManagers}
|
||||||
|
*
|
||||||
|
* @author Mario Petrovski
|
||||||
|
*/
|
||||||
|
public class OAuth2AuthorizationManagersTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void hasScope_withInvalidScope_shouldThrowIllegalArgumentException() {
|
||||||
|
String scope = "SCOPE_invalid";
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> OAuth2AuthorizationManagers.hasScope(scope));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void hasScopes_withInvalidScope_shouldThrowIllegalArgumentException() {
|
||||||
|
String[] scopes = { "read", "write", "SCOPE_invalid" };
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> OAuth2AuthorizationManagers.hasAnyScope(scopes));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void hasScope_withValidScope_shouldPass() {
|
||||||
|
String scope = "read";
|
||||||
|
AuthorityAuthorizationManager<Object> authorizationManager = OAuth2AuthorizationManagers.hasScope(scope);
|
||||||
|
assertNotNull(authorizationManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void hasScope_withValidScopes_shouldPass() {
|
||||||
|
String[] scopes = { "read", "write" };
|
||||||
|
AuthorityAuthorizationManager<Object> authorizationManager = OAuth2AuthorizationManagers.hasAnyScope(scopes);
|
||||||
|
assertNotNull(authorizationManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue