2014-02-21 49 views
1

继续处于'下一个'状态我的场景是这样的:我需要实现一种授权检查在多个流中进行。现在我流的一个看起来是这样的:Spring webflow:从决策状态

<flow parent="myparent-flow"> 
    <decision-state id="checkAuthorization"> 
     <if test="bean.notAuthorized" 
      then="redirectToSomePage" 
      else="view1" /> 
    </decision-state> 
    <view-state id="view1" /> 
    <!-- ... --> 
</flow> 

我需要实现一个数量的流相同的授权检查,而我可以复制粘贴同样的逻辑,无论我真的到,如果可能的话想,把它放在父流中,它已经用来执行每个流的逻辑启动。

这里的问题是决策状态中的其他类。由于它是许多子流的父流,因此它不会知道子流中第一个状态的名称。我想这样使用它,它会以某种方式继续并执行子流中存在的流中的下一个状态。我的最佳解决办法是这样的:

<flow> <!-- flow name = myparent-flow --> 
    <decision-state id="checkAuthorization"> 
     <if test="bean.notAuthorized" 
      then="redirectToSomeFlow" 
      else="continueExecutionInChildFlow" /> 
    </decision-state> 
    <end-state id="redirectToSomeFlow" view="flowRedirect:someFlow" /> 
</flow> 

这将被定义为我的所有数据流的父流,这样我就不必重复此逻辑。春天可以做这样的事吗?

+0

是不是Spring Security检查授权的选项? –

+0

这实际上不是授权,更重要的是根据bean值将用户引导到另一个门户。 – yzfr1

回答

2

一种可能的方法去实现它可能是通过在特定的流程设置一个变量,以后使用这个变量为最终状态重定向,如:

<if test="bean.notAuthorized" 
    then="redirectToSomeFlow" 
    else="${conversationScope.resultView}" /> 

变量可以通过设置:

<set name="conversationScope.resultView" value="'viewName'" />