我正在使用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
问题内容: 我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。 我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。 有任何想法吗? 问题答案: Extend ,覆盖标头吸气剂以返回参数: ..