#java #spring-boot #spring-security
Вопрос:
В моем контроллере у меня есть две конечные точки, где у одной есть предварительная авторизация аннотации, а у другой нет:
@GetMapping
public UserResponse getUser(){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
//get and return User...
}
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PostMapping
public UserResponse createUser(@RequestBody UserRequestDetails userDetails){...}
Защищенная конечная точка работает нормально, работает только тогда, когда я вошел в систему и в заголовке запроса размещен токен с правильной ролью. Но когда я хочу получить доступ к конечной точке без предварительной авторизации, я всегда получаю статус 403 запрещено. Мне нужен доступ к конечной точке getUser, когда пользователи входят в систему и независимо от возможных ролей, которые у них есть.
Вот моя конфигурация безопасности:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurity extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(getAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(jwtAuthorizationFilterBean(), UsernamePasswordAuthenticationFilter.class)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().cors();
}
}
спасибо!
Комментарии:
1. Вы можете использовать
@PreAuthorize("permitAll()")
аннотацию дляgetUser
2. Это может исходить от одного из ваших пользовательских фильтров. Попробуйте добавить некоторые записи в эти фильтры, чтобы увидеть, отклоняется ли там запрос.