首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JWT令牌与requestBody参数在springBoot中的验证

JWT令牌与requestBody参数在springBoot中的验证
EN

Stack Overflow用户
提问于 2021-05-14 20:14:20
回答 1查看 1.2K关注 0票数 1

我有一个反应性的spring引导应用程序,其中我有不同的控制器,所有控制器都有get、post、put、delete方法URI格式=> /{userName}/{others},并确保put和post方法必须在请求体中有一个字段用户it。还有所有具有授权头的请求。

我已经有了一个名为false的方法,它接受2个参数authorizationHeader和userName,如果这个映射存在false,则返回true。

我正在尝试编写通用过滤器,可以过滤传入的请求,并在进入控制器之前进行验证。

如何编写这个通用的webfilter,特别是如何从post请求中提取正文并验证请求。

我试着写这个

代码语言:javascript
运行
复制
@Component
@Slf4j
public class ExampleWebFilter implements WebFilter {
@Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {

        ObjectMapper mapper = new ObjectMapper();

        return serverWebExchange
                .getRequest()
                .getBody()
                .next()
                .flatMap(body -> {
                    try {
                        return validate(body, serverWebExchange
                .geHeaders().get(0))
                    } catch (IOException e) {
                        return Mono.error(e);
                    }
                })
                .flatMap((boolean s) -> {
                    return webFilterChain.filter(serverWebExchange);
                });
    }
    
    Mono<Boolean> validate(DataBuffer body, String Header){
    
    //my logic to validate 
    
    }
    
    }

但是在这个过滤方法执行之后,它似乎挂起了。所以我的问题是

  1. 如何编写将读取主体和验证的webfilter?
  2. 是否有任何其他通用解决方案可用于这种类型的问题?

EN

回答 1

Stack Overflow用户

发布于 2021-05-14 21:57:06

我觉得你应该用拦截器。您可以拦截http调用,并对请求进行验证。您可以以全局方式执行此操作,也可以对特定的端点/路径执行此操作。这是你的案子的例子。

代码语言:javascript
运行
复制
@Component
public class ProductServiceInterceptor implements HandlerInterceptor {
   @Override
   public boolean preHandle(
      HttpServletRequest request, HttpServletResponse response, Object handler) throws 
      Exception {
  
      return true;
   }
   @Override
   public void postHandle(
      HttpServletRequest request, HttpServletResponse response, Object handler, 
      ModelAndView modelAndView) throws Exception {
      //make validations 
    }

   @Override
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
     Object handler, Exception exception) throws Exception {
      //make validations
   }
}

在此之后,您需要注册您的拦截器如下。

代码语言:javascript
运行
复制
@Component
public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {
   @Autowired
   ProductServiceInterceptor productServiceInterceptor;

   @Override
   public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(productServiceInterceptor);
   }
}

有关更多的深度信息,您可以访问下面的链接。

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

https://stackoverflow.com/questions/67540484

复制
相关文章

相似问题

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