servlet filter, um die URL umschreiben
Ich versuche zu umschreiben einer URL aus:
localhost:8080/sendEmail/newEmail.pdf?request_id=23456&emailAddress=
Zu:
localhost:8080/sendEmail/newEmail.pdf?request_id=23456
Filter Klasse code und die Zuordnung ist unten. Wie kann ich diese Aufgabe ausführen? (Eine Antwort mit Beispiel wäre sehr geschätzt).
Filter-mapping:
<filter>
<filter-name>RequestFilter</filter-name>
<filter-class>com.abc.ms.email.filter.RequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Filter code:
public class RequestFilter implements Filter {
private static final Pattern REWRITE_PATTERN = Pattern.compile("(^[1-9]\\d*)$");
public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper((HttpServletRequest)req);
String url = wrapper.getRequestURL().toString();
String number = url.substring(url.lastIndexOf("/")).replace("/", "");
Matcher m = REWRITE_PATTERN.matcher(number);
if (m.find()) {
RequestDispatcher dispatcher = wrapper.getRequestDispatcher("request?id=" + m.group(1));
dispatcher.forward(req, res);
} else {
fc.doFilter(wrapper, res);
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, mit einer vorhandenen Implementierung, sondern schreiben Sie diese auf Ihrem eigenen.
Scheint es die eine Java-URL-rewriting-Umsetzung, die sich Tuckey ' s URLrewriteFilter.
Finden Sie unter: http://tuckey.org/urlrewrite/
Sollte dies tun, was Sie wollen, und vieles mehr.
Alternativ, wenn Sie apache verwenden vor Ihrer web-container, möchten Sie vielleicht zu schauen
mod_rewrite
, die nicht die gleiche auf apache.http://httpd.apache.org/docs/current/mod/mod_rewrite.html
Wenn alles, was Sie wirklich brauchen, ist dies eine einfache URL-Bereinigung dann mit regex oder URL-rewrite-Module vielleicht overkill.
Eine ganz einfache Implementierung könnte etwa so gehen:
Es ist leicht Gerät wurde getestet mit
org.springframework.mock.web.*
Klassen: