解决WebService和Struts2的URL冲突

本文解决了一个在使用Struts2和CXF构建系统时遇到的问题,即Struts2过滤器导致无法访问Webservice文档。通过修改StrutsPrepareAndExecuteFilter,实现了Webservice请求的正常访问,并在web.xml中重新配置了过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近我要做一个系统,选择了Struts2,并且一个模块发布webservice服务,所以选择CXF,但是访问webservice文档时出现了这个问题

195647_NEpL_2328736.png


这是因为访问webservice时的请求被struts2的filter过滤掉了,解决这个问题,我是让Struts2的filter不要过滤webservice的请求,所以要改一下struts2的StrutsPrepareAndExecuteFilter

package com.lin.jllm.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;

/**
 * 继承 StrutsPrepareAndExecuteFilter,改写doFilter方法,使struts2不过滤WebService请求
 * @author lin
 *
 */
public class StrutsPrepareAndExecuteFilterExcludingWebService extends
        StrutsPrepareAndExecuteFilter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;  
        if (request.getRequestURI().contains("webservice")) {   
            //如果是访问webservice,不进行过滤  
            chain.doFilter(req, res);  
        } else {  
            super.doFilter(req, res, chain);
        }  
    }
}


然后在web.xml中从新配置Struts2的过滤器

<!-- 配置CXF请求Servlet -->
    <servlet>
        <servlet-name>CXF</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXF</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
    </servlet-mapping>

    <!-- Struts2 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>com.lin.jllm.filter.StrutsPrepareAndExecuteFilterExcludingWebService</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


再次访问wsdl文档

200211_wgMD_2328736.png


OK.


转载于:https://my.oschina.net/ChiLin/blog/609217

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值