CustomPermissionEvaluator с базой данных.На контроллере или службе REST я хотел бы установить custim Spring Security @preauthorize для проверки доступа к методу в соответствии с правами пользователя.
Право пользователя - это мое приложение для доступа к ресурсу (странице, службе и т. Д.)...) являются специфическими и обрабатываются базой данных вызовов службы абилитации .... Они не загружаются в userDetails.
Итак, как я могу сделать для настройки CustomPermissionEvaluator и нужно ли мне загружать разрешения при входе илипозвоните моим службам в оценщик.
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ContextSecurityConfiguration {
@Bean
public PermissionEvaluator functionPermissionEvaluator() {
return new XxxPermissionEvaluator ();
}
@Bean
protected DefaultMethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(this.functionPermissionEvaluator());
return expressionHandler;
}
}
Evaluator
@Component
public class XxxPermissionEvaluator implements PermissionEvaluator {
@Autowired
private ApplicationContext applicationContext;
@Override
public boolean hasPermission(Authentication authentication, Object entity, Object permission) {
Optional<String> optionalUserId = SecurityUtils.getCurrentUserLogin(authentication);
return optionalUserId.map(userId -> {
EntityValidatorFactory entityValidatorFactory = applicationContext.getBean(EntityValidatorFactory.class);
EntityValidator entityValidator = entityValidatorFactory.get(entity);
return entityValidator.isUserAllowedToEntity(userId, entity, (String) permission);
}).orElse(false);
}
@Override
public boolean hasPermission(Authentication authentication, Serializable serializable, String s, Object o) {
throw new PrimaClaimsRuntimeException("hasPermission is not implemented.");
}
}
Мой pb - это мой пользовательский оценщик, который вызывает службу базы данных, которую он должен внедрить.Или это немного странно в классе конфигурации, чтобы внедрить службу и т. Д. ... сканировать еще, где при той же конфигурации
Так что вызов службы - это хороший способ загрузить разрешение на Вход в userDetail ...