我有一个React式spring启动应用程序,其中我有不同的控制器,所有控制器都有get、post、put、delete方法get和delete方法uri format=>/{username}/{others},并且确保put和post方法在其请求体中必须有一个字段userid。还有所有具有授权标头的请求。
我已经有了一个名为validate的方法,它接受两个参数authorizationheader和username,如果这个Map存在,则返回true,否则返回false。
我正在尝试编写通用过滤器,可以过滤传入的请求,并在进入控制器之前进行验证。
如何编写这个通用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
}
}
但在这个过滤方法执行之后,它似乎挂起了。所以我的问题是
如何编写webfilter来读取正文并进行验证?
对于spring boot中的此类问题,还有其他通用解决方案吗?
1条答案
按热度按时间ndh0cuux1#
我认为你应该使用拦截器。您可以拦截http调用,并对请求进行验证。您可以以全局方式执行此操作,也可以对特定端点/路径执行此操作。这是一个你的例子。
在此之后,您需要像下面这样注册您的拦截器。
欲了解更多详细信息,请访问以下链接。
https://www.youtube.com/watch?v=agbadiax0wc
https://www.tutorialspoint.com/spring_boot/spring_boot_interceptor.htm