#spring-boot #authentication #web #spring-security #webhooks
#spring-boot #аутентификация #веб #spring-безопасность #webhooks
Вопрос:
Я использую приложение spring boot, и у меня настроен адаптер конфигурации веб-безопасности для аутентификации каждого запроса с использованием jwt.
Я хочу расширить свой сервис, чтобы разрешить аутентификацию другой конечной точки api с использованием заголовка. Одна из служб, с которой я интегрируюсь, отправляет веб-хук, и все, что он отправляет, — это запрос с пользовательским заголовком, который я настроил для включения. Как я могу настроить определенную конечную точку для аутентификации только с использованием пользовательского заголовка?
Ответ №1:
Вы могли бы использовать a OncePerRequestFilter
для фильтрации запросов к этой конечной точке и возврата 401, если они не содержат вашего заголовка с правильным значением.
Вы бы определили свой фильтр:
public class HeaderSecurityFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String value = request.getHeader("Token");
if(value == null || !value.equals("Secret")) {
response.sendError(401);
return;
}
chain.doFilter(request, response);
}
}
А затем зарегистрируйте его:
@Configuration
public class HeaderSecurityConfiguration {
@Bean
FilterRegistrationBean<HeaderSecurityFilter> filterRegistration() {
FilterRegistrationBean<HeaderSecurityFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new HeaderSecurityFilter());
registration.addUrlPatterns("/some/path/*");
return registration;
}
}
Для чего потребуется, чтобы заголовок Token
присутствовал со значением Secret
для чего-либо ниже /some/path/*
.
Вам также необходимо будет убедиться в своей конфигурации oauth, к которой вы открываете доступ /some/path/*
.