J'ai installé Spring 3.0 avec des contrôleurs annotés et il trouve mon contrôleur et l'exécute comme il se doit quand je lui envoie une URL à partir d'un navigateur. Mais lors de la réécriture de l'URL avec un filtre exactement le même qui fonctionne dans le navigateur, je reçois No mapping found for HTTP request with URI [/test/lookup]
. Le filtre est chargé par org.springframework.web.filter.DelegatingFilterProxy.servlet dispatcher ne trouve pas l'url réécrite dans le filtre
Qu'est-ce que j'ai manqué dans le filtre?
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.");
}
}
Merci. Je suis d'accord avec le fait que ce n'est vraiment pas une bonne idée. Si quelqu'un a la même idée brillante que moi à l'avenir, ne le faites pas! ;) –