【问题标题】:Spring Web Flow 2.5.1.RELEASE with JSF2.2 flow not executed未执行带有 JSF2.2 流的 Spring Web Flow 2.5.1.RELEASE
【发布时间】:2019-01-24 01:03:29
【问题描述】:

我在这个问题上苦苦挣扎了 5 天,但我不知道在哪里寻找解决方案。 我使用 Mojara 2.1.17 将 JSF 应用程序从 2.1 升级到 2.2 到 2.2.14,包括从 3.2.0 到 4.2.0 的 Icefaces。

我还将 Spring 3.2 升级到 5.1.2,并将 Spring Web Flow 从 2.3.2.RELEASE 升级到 2.5.1.RELEASE。问题是,迁移后不再调用所有 Spring Web Flow。当我单击一个按钮时,没有任何反应。我查看了 Web 控制台,每次单击应该触发 Web 流的按钮时,我都会收到 http 403 错误。

这是我的配置片段:

<webflow:flow-executor id="flowExecutor">
    <webflow:flow-execution-listeners>
        <webflow:listener ref="facesContextListener"/>
        <webflow:listener ref="icefacesFlowListener" />
    </webflow:flow-execution-listeners>
</webflow:flow-executor>

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="flowRegistry" ref="flowRegistry"/>
    <property name="order" value="0"/>
</bean>

<bean id="facesContextListener" 
    class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" />

<faces:flow-builder-services id="flowBuilderServices" development="true" />

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/flows">
    <webflow:flow-location-pattern value="**/*-flow.xml" />
</webflow:flow-registry>

faces-config.xml 很简单,只有:

<application>
    <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
    </el-resolver>
</application>

还有web.xml

<welcome-file-list>
    <welcome-file>flow/welcome</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>flowDispatchServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config />
</servlet>

<servlet-mapping>
    <servlet-name>flowDispatchServlet</servlet-name>
    <url-pattern>/flow/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>flowDispatchServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

<resource-env-ref>
    <resource-env-ref-name>BeanManager</resource-env-ref-name>
    <resource-env-ref-type>
        javax.enterprise.inject.spi.BeanManager
    </resource-env-ref-type>
</resource-env-ref>

主要依赖:

    <spring-integration.version>5.1.0.RELEASE</spring-integration.version>
    <spring-orm.version>5.1.2.RELEASE</spring-orm.version>
    <spring-security-cas-client.version>3.0.8.RELEASE</spring-security-cas-client.version>
    <spring-security.version>5.1.2.RELEASE</spring-security.version>
    <spring.version>5.1.2.RELEASE</spring.version>
    <spring.webflow.version>2.5.1.RELEASE</spring.webflow.version>
    <spring-ws-core.version>3.0.4.RELEASE</spring-ws-core.version>
    <javax.faces.version>2.2.14</javax.faces.version>
    <icefaces-ace.version>4.2.0</icefaces-ace.version>
    <validation-api.version>2.0.1.Final</validation-api.version>

我使用的是 Tomcat 8.5。 还有一个简单的测试流程:

 <view-state id="start" view="welcome.xhtml">
    <transition on="test" to="testView" />
 </<view-state>
 <view-state id="testView" view="test.xhtml"/>

welcome.xhtml中的按钮:

<h:form id="testForm"> 
   ....
  <h:commandButton id="btnTest" class="button" value="Test" action="test"/>
</h:form>

welcome.xhtml 渲染得很好,但点击按钮,我得到了403 error

感谢您的帮助。

【问题讨论】:

  • 有人帮忙吗?

标签: jsf-2.2 spring-webflow spring-web spring-webflow-2 spring-faces


【解决方案1】:

我终于找到了原因。 Spring Security 默认启用 CSRF,这会阻止我表单上的 POST 请求。禁用它可以解决问题。我输了5天!!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多