Я борюсь с моей конфигурацией Spring Security, которую мне пока не удалось заставить работать. нужна ваша помощь.
Это моя конфигурация:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator());
return expressionHandler;
}
}
Это CustomPermissionEvaluator:
public class CustomPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication auth, Object targetDomainObject, Object permission) {
return true;
}
@Override
public boolean hasPermission(Authentication auth, Serializable targetId, String targetType, Object permission) {
return true;
}
}
Это контроллер:
@PreAuthorize("hasPermission(#test, 'write')")
@PostMapping("/test")
public Result saveTest(@RequestBody Test test) {
return Result.build();
}
Все выглядит нормально и просто, но когда я запрашиваю остальные API, возникает следующее исключение:
.m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
Кто-нибудь может мне подсказать, что делать? Спасибо ~
Ошибка связана с отсутствием объекта аутентификации вместо авторизации. Вы определили UserDetailsService и уверены, что ваша аутентификация прошла успешно?
@guleryuz Нет, я включил только @EnableGlobalMethodSecurity, потому что нет необходимости в веб-безопасности моего бизнеса. это нормально?
@RoaldBankras да, я определил UserDetailsService, но я не знаю, как подключиться к методу безопасности, не могли бы вы рассказать мне, как это сделать?
у вас есть аутентификация в вашем приложении?
Для этот блог вы можете подключить свой userDetailService, определив метод для получения AuthenticationManagerBuilder. В этом построителе вы можете определить простой inMemoryAuthentication для тестирования или подключить свою реализацию AuthenticationProvider или UserDetailService.
@RoaldBankras благодарит за любезную помощь.
Пожалуйста. Я переписал комментарии как ответ. Примите ответ, если он вам помог.




Ошибка связана с отсутствием объекта Authentication вместо Authorization. Вы определили UserDetailsService и уверены, что ваша аутентификация прошла успешно?
Для этот блог вы можете подключить свой userDetailService, определив метод для получения AuthenticationManagerBuilder. В этом построителе вы можете определить простой inMemoryAuthentication для тестирования или подключить свою реализацию AuthenticationProvider или UserDetailService.
вы использовали
@EnableWebSecurity, это может помочь