我有一个反应性的spring引导应用程序,其中我有不同的控制器,所有控制器都有get、post、put、delete方法URI格式=> /{userName}/{others},并确保put和post方法必须在请求体中有一个字段用户it。还有所有具有授权头的请求。
我已经有了一个名为false的方法,它接受2个参数authorizationHeader和userName,如果这个映射存在false,则返回true。
我正在尝试编写通用过滤器,可以过滤传入的请求,并在进入控制器之前进行验证。
如何编写这个通用的webfilter,特别是如何从post请求中提取正文并验证请求。
我试着写这个
@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 
    
    }
    
    }但是在这个过滤方法执行之后,它似乎挂起了。所以我的问题是
。
发布于 2021-05-14 21:57:06
我觉得你应该用拦截器。您可以拦截http调用,并对请求进行验证。您可以以全局方式执行此操作,也可以对特定的端点/路径执行此操作。这是你的案子的例子。
@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
   }
}在此之后,您需要注册您的拦截器如下。
@Component
public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {
   @Autowired
   ProductServiceInterceptor productServiceInterceptor;
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(productServiceInterceptor);
   }
}有关更多的深度信息,您可以访问下面的链接。
https://stackoverflow.com/questions/67540484
复制相似问题