首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Boot请求标头验证

Spring Boot请求标头验证
EN

Stack Overflow用户
提问于 2021-03-14 02:30:21
回答 4查看 1.8K关注 0票数 1

我使用Spring Boot 2.3.8来创建rest服务。我有一个验证请求头部的要求,这样它就应该有一定的头部,否则就会抛出错误。这对于所有的方法或服务都应该是通用的。我在下面试过了,

代码语言:javascript
代码运行次数:0
运行
复制
public ResponseEntity<Object> addEmployee(
        @RequestHeader(name = "header1", required = true) String header1,
        @RequestHeader(name = "header2", required = true) String header2,
        @RequestBody Employee employee) 
                 throws Exception 
    { 

但我需要为所有控制器中的所有方法添加此代码。如果是这种情况,我如何为全局所有服务抛出类似"Header1 missing in request headers“/ "header2 missing in request headers”的错误?

EN

回答 4

Stack Overflow用户

发布于 2021-03-14 03:39:57

这就是过滤器的用途。您希望根据头部是否存在来过滤请求,如果头部缺失,则返回错误。如果您不希望将OncePerRequestFilter用于所有请求,则可以选择扩展shouldNotFilter,或者您可以实现一个普通的Filter并使用FilterRegistrationBean仅为特定路径注册它。

然后,在过滤器中,您可以抛出一个异常,并让Spring确定如何显示该异常,或者实际将响应设置为有意义的内容。

票数 1
EN

Stack Overflow用户

发布于 2021-03-14 02:41:05

如果您有Zuul,那么您可以在预路由中读取请求头部属性,并在验证失败时回复填充了错误的请求。

票数 0
EN

Stack Overflow用户

发布于 2021-03-14 02:41:35

这是一个横切的关注点,应该使用AOP完成。由于您使用的是Spring,因此可以执行以下操作:

  1. 创建一个名为ValidateHeaderspublic @interface ValidateHeaders {}

的批注

  1. 创建一个截取带有@ValidateHeaders注释的方法的@Before通知:

@Before("@annotation(com.somepackage.ValidateHeaders)") public void controllerProxy(JoinPoint jp) { Object[] args = jp.getArgs();//验证逻辑,验证失败抛出异常}

请注意,您必须使用反射提取字段,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
Annotation[][] pa = ms.getMethod().getParameterAnnotations();

您可以遍历所有注释并搜索请求头,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
if(annotations[i][j].annotationType().getName().contains("RequestHeader")) {
    RequestHeader requestHeader = (RequestHeader) m.getParameterAnnotations()[i][j];
    //now access fields in requestHeader to do the validation
}

这里有一篇文章可以让你开始使用建议类型:https://www.baeldung.com/spring-aop-advice-tutorial

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66617128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档