代码之家  ›  专栏  ›  技术社区  ›  NA.

dispatcher servlet未在筛选器中找到重写的url

  •  0
  • NA.  · 技术社区  · 16 年前

    我有带注释的控制器的Spring3.0设置,当我从浏览器向它发送url时,它正在查找我的控制器并执行它。但是当用过滤器重写url时,我得到的结果与在浏览器中工作的完全相同 No mapping found for HTTP request with URI [/test/lookup] . 过滤器由org.springframework.web.filter.DelegatingFilterProxy加载。

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    import org.springframework.stereotype.Component;
    
    
    @Component("urlLookupFilter")
    public class UrlLookupFilter implements Filter {
    
        private class ModifiedRequest extends HttpServletRequestWrapper {
    
            private String mRequestURI;
            private String mQueryString;
    
            public ModifiedRequest(HttpServletRequest request) {
                super(request);
            }
    
            @Override
            public String getRequestURI() {
                return mRequestURI;
            }
    
            public void setRequestUri(String s) {
                this.mRequestURI = s;
            }
    
            @Override
            public String getQueryString() {
                return mQueryString;
            }
    
            public void setQueryString(String s) {
                this.mQueryString = s;
            }
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest oRequest = (HttpServletRequest) request;
    
            if (oRequest.getRequestURI().endsWith("test")) {
                ModifiedRequest mRequest = new ModifiedRequest(oRequest);
                mRequest.setRequestUri(oRequest.getContextPath() + "/lookup");
                mRequest.setQueryString(oRequest.getRequestURI().substring(oRequest.getContextPath().length()));
                chain.doFilter(mRequest, response);
                return;
            }
            chain.doFilter(request, response);
        }
    
        public void destroy() {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    previous question ,就在路上 getRequestURI 这还不够,您需要在请求中重写几个不同的与路径相关的方法,例如 getPathInfo , getServletContextPath 等等。这真的不是一个好主意,但是如果你真的想这样做,你必须通过Spring源代码,找到请求中的哪些方法用于进行映射,并确保你超越了这个方法。