У меня проблема с REST API моего сервера SpringBoot. Фактически я создал собственное выражение безопасности, чтобы проверить, разрешено ли конкретному пользователю доступ к ресурсу (это не роль).
Таким образом, мой класс расширяет SecurityExpressionRoot и реализует MethodSecurityExpressionOperations . Все работает нормально (метод успешно вызван), но я не могу использовать свой атрибут UserRepository: он нулевой.
Итак, мой вопрос: как использовать UserRepository экземпляр внутри пользовательского выражения безопасности ?
Заранее спасибо!
public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
public CustomMethodSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
@Inject
private UserRepository userRepository; // This is always null
@Override
public void setFilterObject(Object o) { }
@Override
public Object getFilterObject() { return null; }
@Override
public void setReturnObject(Object o) { }
@Override
public Object getReturnObject() { return null; }
@Override
public Object getThis() { return null; }
public boolean isValidated() {
UserDetails principalUser = (UserDetails)authentication.getPrincipal();
Optional<User> userFromDatabase = userRepository.findOneByLogin(principalUser.getUsername()); // Username is found here
return userFromDatabase.map(user -> { // Not executed because userFromDatabase is null :/
return true;
}).orElseThrow(() -> {
return new UsernameNotFoundException("user was not found in the database");
});
}
}