使用认证头的Spring认证方案



我正在使用spring引导应用程序,并且我有一个web安全配置适配器设置为使用jwt对每个请求进行身份验证。

我想扩展我的服务,允许使用报头对不同的api端点进行身份验证。我正在集成的一个服务发送一个web钩子,它所发送的只是带有我设置的自定义头的请求。如何将特定端点设置为仅使用自定义标头进行身份验证?

您可以使用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/*的访问。

最新更新