Java 使用弹簧安全性来解除弹簧流的安全

Java 使用弹簧安全性来解除弹簧流的安全,java,spring,spring-security,spring-webflow,spring-webflow-2,Java,Spring,Spring Security,Spring Webflow,Spring Webflow 2,我正在开发一个使用SpringWebflow和SpringSecurity的应用程序。我对这两方面都是新手,而且都处于学习阶段。我的问题是关于如何解除特定弹簧流的保护。我有下面的main flow.xml,其内容是- <flow xmlns ... > <subflow-state id="demoSubflowId" subflow="demo/subflow"> <transition to="search" /> </subflow-st

我正在开发一个使用SpringWebflow和SpringSecurity的应用程序。我对这两方面都是新手,而且都处于学习阶段。我的问题是关于如何解除特定弹簧流的保护。我有下面的main flow.xml,其内容是-

<flow xmlns ...  >
<subflow-state id="demoSubflowId" subflow="demo/subflow">
    <transition to="search" />
</subflow-state>

... //There are other subflows configured here

... //这里配置了其他子流

subflow.xml位于另一个名为“demo”的目录中

在Springsecurity config.xml中,我有一个配置,我假设它保护了所有webflow的安全-

<http access-decision-manager-ref="customAccessDecisionManager">
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
    <form-login always-use-default-target="true" default-target-url="/spring/main" login-page="/secureLogin"
        authentication-failure-url="/secureLogin" />
    <logout  success-handler-ref="logoutSuccessHandler" />
    <custom-filter position="LAST" ref="requestInspectionFilter" />
</http>

当前,应用程序中的所有流都需要身份验证。但是现在我被赋予了一个任务,为一个不需要身份验证的任务创建一个新的子流。这就是我在上面创建id=demoSubflowId的新子流的原因,但是每次我尝试从下面的xhtml代码点击这个流时,它都会将我重定向到登录页面

<a href="#" onclick="document.myForm.submit();" class="btn">Xhtml Unsecured demo</a>

<form name="myForm" action="${pageContext.request.contextPath}/spring/main?moduleId=mySubflowId" method="post"> </form>

有人能帮我解决如何解除特定SpringWeb流/子流的保护吗?我在谷歌上搜索并发现了如何从spring安全性中排除URL。在我当前的应用程序中,我们也有servlet URL,这些URL是不安全的(如下所示),并且是在security-config.xml中配置的,但我不知道如何为SpringWebflow URL做到这一点

<http pattern="/secureLogin*" security="none" />
<http pattern="/resetPassword" security="none" />


如果您对spring webflow有任何帮助/建议,我们将不胜感激。提前感谢。

假设您使用
/main
访问流(在您的配置中似乎是这样),您应该能够使用以下方法“解除保护”:

<http pattern="/main" security="none" />

[编辑]

这并不完美,但在主流程中,您可以使用
手动保护其他子流程:


假设您使用配置中的
/main
访问流,您应该能够使用以下方法“解除保护”:

<http pattern="/main" security="none" />

[编辑]

这并不完美,但在主流程中,您可以使用
手动保护其他子流程:



我通过在主url后面添加moduleId来访问它,比如/spring/main?moduleId=mySubflowId。这个URL在上面最后的第二个代码段中提供。如果我按您的方式操作,则有可能所有子流都不安全。我只想取消保护一个特定的子流,如问题中提到的mySubflowId。我通过将moduleId附加到主url(如/spring/main?moduleId=mySubflowId)来访问它。这个URL在上面最后的第二个代码段中提供。如果我按您的方式操作,则有可能所有子流都不安全。我只想取消一个特定的子流,如问题中提到的mySubflowId。