如何以编程方式加载Spring Webflow流并获取其内容

时间:2017-03-16 12:47:28

标签: java spring spring-mvc spring-webflow

我需要在JAVA中以编程方式加载现有的Spring-webflow流程,以检查它的安全标记。

我的目标是在特定事件后检查安全标记。

这里使用Spring-webflow 2.4。我的流程看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance"
ns0:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">


<secured attributes="RIGHT_1,RIGHT_2" />

<view-state id="someViewState">
[...]
</view-state>

[...]

</flow>

那么我怎样才能得到这些流量&#34;内容&#34;通过spring API?我试图通过org.springframework.webflow.config包的类找到我的方法,但是我找不到干草中的针。我甚至无法成功加载流程。

我使用流程已经有一段时间了,但我从来不需要在Java代码中访问它们。

Thx,任何提示。

1 个答案:

答案 0 :(得分:0)

我自己得到了它:

在扩展org.springframework.web.servlet.mvc.AbstractController的类中,你可以这样做:

// get the application Context
ApplicationContext context = getApplicationContext();
// get webflowController, must be configured in your webflowConfig file
FlowController controller = (FlowController)context.getBean("flowController");
FlowExecutorImpl flowExecutorImpl = (FlowExecutorImpl)controller.getFlowExecutor();
FlowDefinitionRegistryImpl flowDefinitionRegistryImpl = (FlowDefinitionRegistryImpl)flowExecutorImpl.getDefinitionLocator();

// flowId is the id of the flow you want to check
FlowDefinition flowDefinition = flowDefinitionRegistryImpl.getFlowDefinition(flowId);

MutableAttributeMap<Object> attributes = flowDefinition.getAttributes();

// finally the SecurityRule Object that you can pass to a specific AccessDecisionManager
SecurityRule securityRule = (SecurityRule)attributes.get("secured");