• cxf与struts2拦截器冲突的解决方案


    最近学习接口,学习了下cxf,用tomcat部署访问的时候,发现接口不能访问;百度了很多,最终找到比较好的解决方案; 

    sturts2配置: 
    <!-- 设置strus拦截器 --> 
    <filter> 
    <filter-name>struts</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>struts</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 


    cxf拦截器配置: 
    <!-- 设置cxf接口配置 --> 
    <listener> 
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
    </listener> 

    <servlet> 
    <servlet-name>CXFService</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>CXFService</servlet-name> 
    <url-pattern>/myCXF/*</url-pattern> 
    </servlet-mapping> 


    结果访问的时候,struts率先被执行。 



    解决该问题好的方案就是重写struts2的拦截器: 

    package com.filter; 

    import java.io.IOException; 

    import javax.servlet.FilterChain; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 
    import javax.servlet.http.HttpServletRequest; 

    import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter; 

    public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter{ 
        public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {  
            HttpServletRequest request = (HttpServletRequest) req;  
            //不过滤的url,可以自行添加  
            if (request.getRequestURI().contains("/myCXF")) {  
                //System.out.println("使用自定义的过滤器");  
                chain.doFilter(req, res);  
            }else{  
                //System.out.println("使用默认的过滤器");  
                super.doFilter(request, res, chain); 
            }  
        }  



    然后重新配置struts2的拦截器: 
    <filter> 
    <filter-name>struts</filter-name> 
    <filter-class>com.filter.ExtendStrutsFilter</filter-class> 
    </filter> 

    此时访问就没有问题了,对原项目影响不大 同时修改也很方便

  • 相关阅读:
    word 导出(带有一个图片,一张datatable)
    asp.net 获取当前时间的格式
    解决<compilation debug="true" targetFramework="4.0"> 问题
    安装office专业增强版2016(word/excel/ppt/visio)的记录
    JS,Jquery获取各种屏幕的宽度和高度
    utc本地时间
    extjs使用gridPanel演示基于asp.net使用json传送数据
    获取物料指定日期的库存
    resize
    关于完工入库研究
  • 原文地址:https://www.cnblogs.com/sdream/p/5473792.html
Copyright © 2020-2023  润新知