Я использую Spring Boot и Oauth2 для Spring Security, и я хочу проверить, доступна ли данная конечная точка API для всех пользователей.Весна: Как проверить программно, если заданная конечная точка защищена
Пример класса конфигурации OAuth:
@Configuration
public class OAuth2ServerConfiguration {
//(...)
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login**", "/logout**", "/denied**", "/index**")
.permitAll()
.antMatchers("/ma/**", "/maintenance/**", "/api/maintenance/**")
.permitAll()
// .hasAnyRole("ADMIN")
.antMatchers("/api/**")
.permitAll()
// .hasAnyRole("ADMIN", "USER")
.anyRequest()
.denyAll()
.and()
.exceptionHandling()
.accessDeniedPage("/denied")
.and()
.csrf()
.disable();
}
//(...)
}
Как проверить программным способом, если, например, enpoint /api/someMethod
доступен для всех (зарегистрирован .permitAll()
)? Есть ли простой способ сделать это, даже если я использую базовую или дайджест авторизацию?
Даже если метод контроллера доступен, на сервисе может быть защищенная аннотация, а также слой DAO веб-приложения. Для такой аннотации, если условие не удовлетворено, этот метод не вызывается, и вы даже не знаете. –
Я не использую аннотацию '@ Secured', если это поможет. –
Тогда я не понимаю ваш вопрос, потому что, если ваша безопасность ограничена до тех пор, пока методы контроллера не будут исчерпаны, то все из них, которые вы не упомянули в своей конфигурации безопасности, являются небезопасными методами, путем вычитания. –