Я пытался заменить некоторые проверки полномочий вручную аннотациями (@Secured
и @PreAuthorize
). При отладке, почему это не работает, я был удивлен, обнаружив, что второе из этих двух утверждений не удалось в верхней части метода контроллера @RequestMapping
.Власти SecurityContext не равны ролям ServletRequest?
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
assert(auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_READER"))); // passes
assert(request.isUserInRole("ROLE_READER")); // fails
Я предполагаю, что (как я не могу заставить их разрешить что-нибудь) @Secured
и hasRole()
делают использование последнего поиска?
Являются ли роли, которые не должны автоматически заселяться от властей SecurityContext
?
Был ли фильтр, который установил Authentication
, предположительно, чтобы добавить роли отдельно?
Edit:
Сократите конфигурации безопасности весны до весны (1.3.0) по умолчанию ботинка, а также фильтр, который устанавливает аутентификацию.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new JwtAuthenticationFilter(), FilterSecurityInterceptor.class);
}
}
Опубликуйте свою конфигурацию ... И какую версию безопасности для весны вы используете. –
Я далек от MVCE - конфигурация распространяется по многим классам во многих проектах. Это не вопрос «найти мою ошибку», это вопрос «как это работает». – OrangeDog
Единственное, что нужно - это настройка безопасности и ответ на вопрос о том, какую версию Spring Security вы используете. –