当前位置:首页 > 开发 > 编程语言 > Spring > 正文

cxf、struts、spring中web.xml过滤url问题解决方案

发表于: 2012-03-02   作者:chyx72   来源:转载   浏览次数:
摘要: 最近项目遇到webService配置cxf过滤器时与struts冲突问题,原因是web.xml的过滤地址匹配问题,看了很多网上能找到的解决方案,在这里总结一下: cxf在spring的配置不变, <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://w
最近项目遇到webService配置cxf过滤器时与struts冲突问题,原因是web.xml的过滤地址匹配问题,看了很多网上能找到的解决方案,在这里总结一下:
cxf在spring的配置不变,
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
.........

web.xml配置:
cxf在web.xml配置不变
<servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/schemas/*</url-pattern>
    </servlet-mapping>

方案一:
网上说的最多,但有时不一定有效的一种方法
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern><!--此处把/* 改成 *.action-->
    </filter-mapping>

方案二:
方法很巧妙,也是在Iteye上看的帖 http://www.iteye.com/topic/673231
该贴中用到的FilterDispatcher 在2.1.x以后的版本都不建议使用,所以我们可以重写StrutsPrepareAndExecuteFilter来实现过滤
public class StrutsFilter extends StrutsPrepareAndExecuteFilter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        String url = ((HttpServletRequest)req).getRequestURI();
        if (url.indexOf("schemas") < 0) { //另外一种过滤cxf方式
            super.doFilter(req, res, chain);
        } else {
            chain.doFilter(req, res);
        }
    }
}

这个类在我的com.chyx.web.filter包下面
web.xml
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>com.chyx.web.filter.StrutsFilter</filter-class>
    </filter><!--此处把StrutsPrepareAndExecuteFilter改成了重写的StrutsFilter-->
<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern><!-- 此处不变 -->
    </filter-mapping>

方案三:
利用struts2自带的正则匹配,应该说这算是最官方的解决方案了
在struts.properties中加正则匹配
struts.action.excludePattern=/schemas/.*
web.xml
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

struts的配置2处都不变

cxf、struts、spring中web.xml过滤url问题解决方案

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近学校WebService的CXF..做了一个示例程序是 CXF+Struts+spring的... 有用的就看看.没用的就飘过!
1、mybatis 数字用$,字符用# 2、cxf 关于JSONProvider 返回单个对象数组的问题。 app-rest.xml配置
1、mybatis 数字用$,字符用# 2、cxf 关于JSONProvider 返回单个对象数组的问题。 app-rest.xml配置
最近开始使用cxf创建webservice,并创建client访问webservice,出现了一些问题,尝试解决掉 webserv
在前一篇文章中,还是有些地方没讲清楚,但那篇文章已经有点长了,所以还是另外单独讲一下吧。见Secu
在前一篇文章中,还是有些地方没讲清楚,但那篇文章已经有点长了,所以还是另外单独讲一下吧。见Secu
首先我们建一个web项目,导入cxf包,spring的包。注意这里不用加入jetty的包,因为我们用了tomcat
目录 前言 现象 源码分析 实战例子 总结 参考资料 前言 今天研究了一下tomcat上web.xml配置文件中ur
http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html 前言 今天研究了
spring 中, action和url的对应关系 在web.xml中,这样配置: &n
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号