webservice发布地址和项目冲突问题(url拦截冲突)

xiaoxiao2021-02-28  115

在web项目中开发webservice接口在发布的时候会遇到url冲突问题,即每个web项目无论使用的是struts或者spring mvc都会有一个地址拦截器,并且拦截的地址一般都会配置成/*,这样就会把所有的请求都会拦截,然后作为一个action或者controller处理。这种情况就导致我们在访问webservice发布的url时也会被拦截,并且提示没有这个action或者controller。(这个报错还是很对的,我们项目中确实没有)

我们想要的效果只是通过web项目发布webservice,并不想然web项目处理这个地址,所以必须不让web拦截这个url。我目前知道的有两种方式实现,一种是重写过滤器,还有一种是配置不拦截的url。我使用的重写过滤器,至于配置不拦截的url并不确定是否一定可行

配置拦截器:

spring mvc:

<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*" /> <mvc:exclude-mapping path="/webservice/*" /> <bean class="com.itcast.oa.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors> struts:

在struts.xml配置文件中添加

<constant name="struts.action.excludePattern" value="/webservice"></constant> 以上通过配置文件的方式,我没有试过,正确与否并不能保证,重写filter已经实现

可以使用。以spring mvc为例,struts相同

public class DispaDispatcherForWebserviceServlet extends DispatcherServlet{ @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw IOException, ServletException{ HttpServletRequest request = (HttpServletReqeust) req; String requestUrl = reqeust.getRequestURI(); /* * 如果是指定的url放过,走下一个过滤器 * 不是:按照原来的流程处理 */ if(reqeustUrl.contains("/webservice")){ chain.doFilter(req, res); }else{ super.doFilter(req, res, chain); } } } web.xml配置

<servlet> <servlet-name>springMvc</servlet-name> <servlet-class>com.xu.servlet.DispaDispatcherForWebserviceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 这样就解决webservice发布地址冲突的问题了。

转载请注明原文地址: https://www.6miu.com/read-17948.html

最新回复(0)