我正在使用 Spring Boot 应用程序,并且我设置了一个网络安全配置适配器来使用 jwt 对每个请求进行身份验证。
我想扩展我的服务以允许使用标头对不同的 api 端点进行身份验证。我正在集成的其中一项服务发送一个 Web 钩子,它发送的所有内容都是带有我设置为包含的自定义标头的请求。如何将特定端点设置为仅使用自定义标头进行身份验证?
答案 0 :(得分:0)
您可以使用 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/*
的访问。