Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Webflow-防止直接访问子流_Spring_Web Applications_Spring Security_Spring Webflow - Fatal编程技术网

Spring Webflow-防止直接访问子流

Spring Webflow-防止直接访问子流,spring,web-applications,spring-security,spring-webflow,Spring,Web Applications,Spring Security,Spring Webflow,我在我的webapp中使用springwebflow,我想知道是否有一种通用的方法来防止直接访问某些子流。这些子流意味着只能从特定流访问,而不是直接通过url访问,因此在这些子流中,我想检查“是否从流调用我” 是否有任何机制来实现这一目标?我正在查看SpringSecurity,但找不到任何有用的特性来进行这种限制 谢谢你 您可以使用输入映射器属性来检查这一点,如下所示。假设您有一个调用“子流流”的父流。您需要将包含父流名称的输入值传递为: <?xml version="1.0"

我在我的webapp中使用springwebflow,我想知道是否有一种通用的方法来防止直接访问某些子流。这些子流意味着只能从特定流访问,而不是直接通过url访问,因此在这些子流中,我想检查“是否从流调用我”

是否有任何机制来实现这一目标?我正在查看SpringSecurity,但找不到任何有用的特性来进行这种限制


谢谢你

您可以使用输入映射器属性来检查这一点,如下所示。假设您有一个调用“子流流”的父流。您需要将包含父流名称的输入值传递为:

    <?xml version="1.0" encoding="UTF-8"?>
    <flow xmlns="http://www.springframework.org/schema/webflow"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/webflow
            http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">  
        ... 
        <subflow-state id="subflow-flow" subflow="subflow-flow">
            <!--flowInitiatedBy should be different for each different parent flow-->
            <input name="flowInitiatedBy" value="'parentFlowName'"/>
            <transition on="invalidAccess" to="someViewWithMessage"/>
            <transition on="processedSubflow" to="someOtherState"/>
        </subflow-state>
        ...
    </flow>

希望这有帮助。

我也希望有某种内置的简单机制。然而,我只是用了一种稍微不同的方式来分享。也就是说,因为我的子流知道它自己的名称,所以我刚刚让流配置中的第一个状态检查流ID(名称)是否与硬编码的名称匹配:

<decision-state id="subOnly">
    <if test="flowExecutionContext.definition.id == 'thisSubflowFlowName'" then="invalidAccess" else="mySubflowFirstState"/>
</decision-state>


其中“invalidAccess”是一个
结束状态
,如前面的答案所示。

好的,这很有帮助!然而,我期望一个更通用的解决方案,而不涉及额外的代码。但我认为没有这样的解决办法!谢谢你!
    public class YourAction{
    ...
    public String checkAccessibility(RequestContext context){
        String flowInitiatedBy = context.getFlowScope().get("flowInitiatedBy");
        //flowInitiatedBy will be empty if initiated by url.
        if(flowInitiatedBy is empty){
            return "invalidAccess";
        }else{
            // dosomething
            return "continue";
        }
    }
    ...
    }
<decision-state id="subOnly">
    <if test="flowExecutionContext.definition.id == 'thisSubflowFlowName'" then="invalidAccess" else="mySubflowFirstState"/>
</decision-state>