Я пытаюсь реализовать Ролевую иерархию , а затем использовать ее в методе безопасности.
Для простоты здесь всего две роли: АДМИН и ЦЕЛЬ. АДМИН включает ЦЕЛЬ.
Я создал компонент RoleHierarchy в отдельном файле конфигурации, потому что некоторые люди здесь заявили, что фильтры Spring Security необходимо настроить довольно рано.
Проблема: Когда я ' Получая доступ к контроллеру, я получаю ошибку NullPointer (которая указана ниже)
Вопросы:
- Где находится ошибка?
- Нужно ли мне декларировать свою пользовательскую иерархию в GlobalMethodSecurityConfiguration или WebSecurityConfigurerAdapter или в обоих?
Исходный код:
- BeleHierarchy Bean
@Configuration
public class CustomRoleHierarchy extends RoleHierarchyImpl {
@Bean
public RoleHierarchyImpl roleHierarchy() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ADMIN > GOAL");
return roleHierarchy;
}
}
GlobalMethodSecurityConfiguration @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, jsr250Enabled = true, proxyTargetClass = true)
public class CustomMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Autowired
CustomPermissionEvaluator permissionEvaluator;
@Autowired
CustomRoleHierarchy roleHierarchy;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setPermissionEvaluator(permissionEvaluator);
handler.setRoleHierarchy(roleHierarchy);
return handler;
}
Контроллер Пытался также использовать @PreAuthorize ("hasRole ('ROLE_GOAL')" или @PreAuthorize ("hasRole ('GOAL')".
@RequestMapping(value = WEB_URL, method = RequestMethod.GET)
@PreAuthorize("hasAuthority('GOAL')")
public String goalList (Model model) {
...
Ошибка при доступе к контроллеру:
java.lang.NullPointerException: null
at org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl.getRolesReachableInOneOrMoreSteps(RoleHierarchyImpl.java:164) ~[spring-security-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl.getReachableGrantedAuthorities(RoleHierarchyImpl.java:122) ~[spring-security-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.security.access.expression.SecurityExpressionRoot.getAuthoritySet(SecurityExpressionRoot.java:167) ~[spring-security-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]