Я работаю над облачным шлюзом Spring, который аутентифицируется с помощью OAuth2 с помощью цепочки фильтров безопасности Spring. В настоящее время у меня возникает ошибка на странице входа в OAuth2 из-за того, что какой-то неизвестный запрос авторизации не найден, и мне нужно решить эту проблему. Я нашел выход, добавив настраиваемый заголовок местоположения и направив пользователя в это место при возникновении исключения. В настоящее время я сталкиваюсь с проблемами, когда имею контроль над цепочкой пружинных фильтров безопасности. Ниже приведен блок кода, который я использовал:
@Bean
@Order(1)
SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity serverHttpSecurity)
throws Exception {
ServerRequestCache requestCache = NoOpServerRequestCache.getInstance();
WebFilter webFilter = new CustomWebFilter();
serverHttpSecurity
//.addFilterAt(webFilter, SecurityWebFiltersOrder.FIRST)
.cors().and().headers()
.frameOptions().disable()
.and().requestCache().requestCache(requestCache)
.and().csrf().disable()
.authorizeExchange().pathMatchers("/**").authenticated()
.and().oauth2Login()
.and().oauth2Client()
.and().oauth2ResourceServer().jwt();
return serverHttpSecurity.build();
}
Здесь я попытался добавить фильтр перед аутентификацией, но он блокирует запрос, и я получаю нулевой ответ, и он не направляет меня в страница входа.
.addFilterAt(webFilter, SecurityWebFiltersOrder.FIRST)
Ниже мой customWebFilter, где я добавил код для добавления заголовка местоположения.
public class CustomWebFilter implements WebFilter {
@Autowired
URIconfig uRIconfig;
final Logger logger = LoggerFactory.getLogger(CustomWebFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
URI location = exchange.getRequest().getURI();
uRIconfig.setLocation(location);
logger.info("Custom Pre Filter executed");
return chain.filter(exchange);
}
}
Может кто-нибудь помочь мне добавить заголовок или повар ie в зависимости от того, что возможно до того, как запрос будет перенаправлен на страницу входа OAuth2? Или как я могу использовать фильтр?
Любая помощь приветствуется. Заранее спасибо!