Я хочу включить Spring Security с помощью моего пользовательского фильтра, но я обнаружил, что не могу включить его только для путей, определенных в моем контроллере.
Вот моя текущая конфигурация SecurityConfiguration:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.antMatcher("/api/v1/**").addFilterBefore(
new AuthenticationFilter(myAuthenticator()),
ChannelProcessingFilter.class);
}
}
В моем контроллере у меня есть /api/v1/user
, /api/v1/user/{userId}
. Когда я пытаюсь получить доступ к неверному пути, например, /api/v1/invalid
, я всегда получаю 401 вместо 404, так как любой путь, начинающийся с /api/v1
, сначала будет проходить через go через AuthenticationFilter. Это также происходило, когда я пытаюсь использовать неподдерживаемый метод HTTP в существующем пути, мое приложение будет возвращать 401, а не 405.
Я хочу добиться чего-то вроде добавления аннотации на уровне контроллера (или уровне метода). также подходит), и применять фильтр аутентификации только к путям, определенным в этом контроллере, например
@WhateverAnnotationWillAddFilterToThisController***
@RestController
@RequestMapping(value = "/api/v1", produces = "application/json")
public interface LicensingController {
@RequestMapping(value = "user", method = RequestMethod.POST)
public ResponseEntity<?> user();
@RequestMapping(value = "user/{userId}", method = RequestMethod.GET)
public ResponseEntity<LicensingRequest> getUser(
@PathVariable
String userId);
}
. Любые рекомендации будут оценены. Спасибо!