cxf spring struts2 路径解决

最近项目遇到webService配置cxf过滤器时与struts冲突问题,原因是web.xml的过滤地址匹配问题,看了很多网上能找到的解决方案,在这里总结一下: 
cxf在spring的配置不变, 
Xml代码   收藏代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"  
  3.     xsi:schemaLocation="  
  4. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
  6.   
  7.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  8.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  9.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  10. .........  

web.xml配置: 
cxf在web.xml配置不变 
Xml代码   收藏代码
  1. <servlet>  
  2.         <servlet-name>CXFServlet</servlet-name>  
  3.         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  4.         <load-on-startup>1</load-on-startup>  
  5.     </servlet>  
  6.   
  7.     <servlet-mapping>  
  8.         <servlet-name>CXFServlet</servlet-name>  
  9.         <url-pattern>/schemas/*</url-pattern>  
  10.     </servlet-mapping>  

方案一: 
网上说的最多,但有时不一定有效的一种方法 
Xml代码   收藏代码
  1. <filter>  
  2.         <filter-name>struts2</filter-name>  
  3.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  4.     </filter>  
  5. <filter-mapping>  
  6.         <filter-name>struts2</filter-name>  
  7.         <url-pattern>*.action</url-pattern><!--此处把/* 改成 *.action-->  
  8.     </filter-mapping>  

方案二: 
方法很巧妙,也是在Iteye上看的帖 http://www.iteye.com/topic/673231 
该贴中用到的FilterDispatcher 在2.1.x以后的版本都不建议使用,所以我们可以重写StrutsPrepareAndExecuteFilter来实现过滤 
Java代码   收藏代码
  1. public class StrutsFilter extends StrutsPrepareAndExecuteFilter {  
  2.     @Override  
  3.     public void init(FilterConfig filterConfig) throws ServletException {  
  4.         super.init(filterConfig);  
  5.     }  
  6.   
  7.     @Override  
  8.     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
  9.         String url = ((HttpServletRequest)req).getRequestURI();  
  10.         if (url.indexOf("schemas") < 0) { //另外一种过滤cxf方式  
  11.             super.doFilter(req, res, chain);  
  12.         } else {  
  13.             chain.doFilter(req, res);  
  14.         }  
  15.     }  
  16. }  

这个类在我的com.chyx.web.filter包下面 
web.xml 
Xml代码   收藏代码
  1. <filter>  
  2.         <filter-name>struts2</filter-name>  
  3.         <filter-class>com.chyx.web.filter.StrutsFilter</filter-class>  
  4.     </filter><!--此处把StrutsPrepareAndExecuteFilter改成了重写的StrutsFilter-->  
  5. <filter-mapping>  
  6.         <filter-name>struts2</filter-name>  
  7.         <url-pattern>/*</url-pattern><!-- 此处不变 -->  
  8.     </filter-mapping>  

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

struts的配置2处都不变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值