gpt4 book ai didi

java - 如何在 Spring Web Flow 监听器中检测重定向?

转载 作者:行者123 更新时间:2023-11-30 05:06:58 26 4
gpt4 key购买 nike

我有一个使用 Spring 框架、Velocity 和(部分)Spring Web Flow 编写的 Web 应用程序。

为了在我的所有网页中为我的速度模板提供一组通用的引用,我编写了一个 FlowExecutionListener,如下所示:

@Override
public void requestSubmitted(RequestContext context)
{
Map<String, Object> model = new HashMap<String, Object>();
populateModel(model);
context.getRequestScope().putAll(new LocalAttributeMap(model));
}

然后我可以访问模型中存储的 key 作为 Velocity 引用,例如$reference。一般来说,这效果很好。

但是,流程中的某些退出点将重定向到 GET 请求,如下所示:

<view-state id="startOver" view="redirect:/new"/>

这些重定向将对新请求执行 302,所有请求属性都转换为 URL 参数,从而导致一个大而笨拙的 URL,而不是我试图重定向到的干净的 /new url .

我想在监听器中检测流何时返回重定向,以便我可以跳过请求属性中字符串的存储。 (我使用标准 Spring MVC 的拦截器通过匹配 View 名称是否以“redirect:”开头来执行此操作)。但我似乎无法在监听器中找到一种方法来检测这一点。

或者,是否有其他方法可以防止重定向后将请求属性放在 URL 上?

最佳答案

您可以使用自定义 FlowUrlHandler 来构建重定向的 URL。了解如何实现它的最佳方法是查看 DefaultFlowUrlHandler 的代码,但问题的主要思想是过滤来自 flowDefinitionUrl 的输入,例如:

class MyFlowHandlerAdapter extends DefaultFlowHandlerAdapter {
public String createFlowDefinitionUrl(String flowId, AttributeMap input, HttpServletRequest request) {
MuttableAttributeMap filteredInput = new MuttableAttributeMap(input);
// remove the velocity parameters
filteredInput.remove("velocity.param1");
// build the url
return super.createFlowDefinitionUrl(flowId,filteredInput,request);
}

}

要使用它,请使用以下 Spring 配置:

<bean id="myFlowUrlHandler" class="com.myapp.MyFlowHandlerAdapter">

<!-- Dispatches requests mapped to flows to FlowHandler implementations -->
<bean id="flowHandlerAdapter" class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="flowExecutor" />
<property name="flowUrlHandler" ref="myFlowUrlHandler" />
<property name="requireSession" value="true" />
</bean>

关于java - 如何在 Spring Web Flow 监听器中检测重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com