我正在使用Spring Integration Filter对传入消息强制执行一些验证逻辑。验证的结果需要发回消息网关调用方,以便通知请求的具体错误。
detailMessage = "message has been rejected in filter: bean 'validationFilter.requestValidation.filter.handler' for component 'validationFilter.requestValidation.filter'"
配置
网关
@MessagingGateway( name="processApiGateway", defaultRequestChannel = "inboundGatewayChannel")
public interface ProcessApiGateway {
@Gateway
Response getTransactions(Message<ServiceRequest> payload);
}
过滤器
@Filter(inputChannel="inboundGatewayChannel", throwExceptionOnRejection = "true")
public boolean requestValidation(Message<ServiceRequest> message) {
try {
LocalDate fromDate = LocalDate.parse(message.getPayload().getFromDate());
LocalDate toDate = LocalDate.parse(message.getPayload().getToDate());
return (Period.between(fromDate, toDate)).getMonths() <= 1;
}
catch (DateTimeParseException ex) {
return false;
}
}
@Bean
public MessageChannel inboundGatewayChannel(@Qualifier("taskExecutor")TaskExecutor taskExecutor) {
return new ExecutorChannel(taskExecutor);
@Filter(inputChannel="inboundGatewayChannel", discardChannel = "filterDiscardChannel")
public boolean requestValidation(Message<ServiceRequest> message) {
try {
LocalDate fromDate = LocalDate.parse(message.getPayload().getFromDate());
LocalDate toDate = LocalDate.parse(message.getPayload().getToDate());
return (Period.between(fromDate, toDate)).getMonths() <= 1;
}
catch (DateTimeParseException ex) {
return false;
}
}
@Service
public class ValidationServiceActivator {
@ServiceActivator(inputChannel = "filterDiscardChannel")
public Response handleDiscardMessage(Message<ServiceRequest> message) {
//the same logic to validate discarded message
}
}
如果您想返回一些自定义响应,而不是异常,那么我建议您只使用普通的@ServiceActivator
,在该方法中执行验证逻辑并返回这个或那个答复。在这种情况下不需要过滤器。
看起来,即使使用DiscardChannel
,仍然不足以确定问题...
重定向::客户(登录)似乎只适用于GET请求。也就是说,它将把经过身份验证的用户重定向到原始的预期URL(GET)。 在存在POST请求的情况下,在用户成功登录后,是否有一种方式让auth筛选器继续向URL发布? 一个简单的例子:我想展示一个可供任何人查看的表单。点击submit按钮后,auth过滤器将启动,并将来宾带到登录页面。成功验证后,我希望提交请求(即POST请求)继续。
在Controller/JAX-RSendpoint处理请求后,如何执行Spring Security过滤器? 当请求被双向处理时,一个普通的java过滤器链应该得到控制。如何使用Spring Security过滤器实现这一点?我试着给chain打电话。doFilter()开始,并在调用后添加我的逻辑。但是,在处理请求后,控件不会返回。 关于如何实现这一点,有什么建议吗?是否有可能使用Spring
在Jersey中,可以添加或 两者都是使用PackagesResourceConfig添加的: 谢谢
在内部,如果出现任何异常,将被重定向&这不需要通过,可以跳过此请求。 我已经实现了OncePerRequestFilter&任何请求都不会调用它。这必须在OAuth过滤器之前调用。 让我知道这个安全配置出了什么问题。
我试图在spring boot应用程序中配置的过滤器中获取请求中的Traceid以进行审计。 我们如何从过滤器中的请求中获取Traceid
我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 为空。我可以将上下文注入到被调用的实际endpoint中,但这相当粗糙和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端找到这个对象。 必须有一种简单的方法来做到这一点。到目前为止,我看到的所有问题/答案都不适用于灰熊,或者注入了RESTendpoint调