Wie Sie ein servlet-filter in Java zu ändern servlet eine eingehende Anfrage-url?
Wie kann ich ein servlet-filter zu ändern servlet eine eingehende Anfrage-url von
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
zu
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
Update: nach BalusC die Schritte unten, ich kam mit dem folgenden code:
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
Den entsprechenden Eintrag in web.xml
wie folgt Aussehen:
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Ich versucht, sowohl die server-Seite und client-Seite umleiten, mit den erwarteten Ergebnissen. Es funktionierte, Dank BalusC!
Verwandte Frage: stackoverflow.com/questions/2723829/...
Die version der servlet-Spezifikation verwenden Sie ? Wie Sie Anfragen ändert sich mit den verschiedenen Versionen.
diesen Beitrag es hat auch einen Filter, der das tut, was Sie wollen
Bitte beachten Sie, dass wenn Sie Ihre original-URL Parameter enthält, also nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123?**param1=A¶m2=B** dann diese Parameter werden auch weitergeleitet zur nächsten servlet/jsp. Ich habe nicht einen Weg finden, um loszuwerden, oder ersetzen Sie original-Parameter (nur mit HttpServletRequestWrapper). Irgendwelche Ideen?.. Update: es scheint, dass http://ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/ behebt dieses problem.
Danke ich war auf der Suche für ein Beispiel für die url-Umschreibung und-Verschlüsselung .
Die version der servlet-Spezifikation verwenden Sie ? Wie Sie Anfragen ändert sich mit den verschiedenen Versionen.
diesen Beitrag es hat auch einen Filter, der das tut, was Sie wollen
Bitte beachten Sie, dass wenn Sie Ihre original-URL Parameter enthält, also nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123?**param1=A¶m2=B** dann diese Parameter werden auch weitergeleitet zur nächsten servlet/jsp. Ich habe nicht einen Weg finden, um loszuwerden, oder ersetzen Sie original-Parameter (nur mit HttpServletRequestWrapper). Irgendwelche Ideen?.. Update: es scheint, dass http://ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/ behebt dieses problem.
Danke ich war auf der Suche für ein Beispiel für die url-Umschreibung und-Verschlüsselung .
InformationsquelleAutor Frank | 2010-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
javax.- servlet.- Filter
.doFilter()
Methode, warf der eingehendenServletRequest
zuHttpServletRequest
.HttpServletRequest#getRequestURI()
zu schnappen Sie sich den Pfad.java.lang.String
Methoden wiesubstring()
,split()
,concat()
und so weiter zu extrahieren, die Teil des Interesses und schreiben den neuen Pfad.ServletRequest#getRequestDispatcher()
und dannRequestDispatcher#forward()
weiterleiten der Anfrage - /Antwort-auf die neue URL (server-side-redirect, spiegelt sich nicht in der browser-Adressleiste), oder Besetzung der eingehendenServletResponse
zuHttpServletResponse
und dannHttpServletResponse#sendRedirect()
leiten Sie die Antwort auf die neue URL (client-Seite umzuleiten, die sich in browser-Adressleiste).web.xml
auf eineurl-pattern
von/*
oder/Check_License/*
je nach Kontext-Pfad, oder, wenn Sie auf Servlet 3.0 bereits, verwenden Sie die@WebFilter
- Anmerkung für die, die statt.Vergessen Sie nicht, fügen Sie eine überprüfung im code, ob die URL muss geändert werden, und wenn nicht, dann rufen Sie einfach
FilterChain#doFilter()
, sonst ruft sich in einer Endlosschleife.Alternativ können Sie auch nur die Nutzung einer vorhandenen 3rd-party-API zu tun, die ganze Arbeit für Sie, wie Tuckey ' s UrlRewriteFilter, die konfiguriert werden können, die Art und Weise, wie mit Apache
mod_rewrite
.Bei welchem Schritt genau bist du stucking? Meine Antwort fast schreibt den code selbst. Hast du auch beachten, dass der code verweist in blau sind eigentlich links zu den Javadocs die Beschreibung der Klasse/Methode, die das Verhalten im detail? Zu jedem Weg, finden Sie hier und hier gute JSP/Servlet tutorials, speziell dieser über Filter.
drücken Sie einfach auf "Frage stellen" - button am rechten oberen Rand.
Ich nehme es korrekt ist, aber wenn der filter zu ist eine der ersten in der Kette, und das
RequestDispatcher#forward()
ausgeführt wird, wird der rest der Filter nicht ausgeführt werden. Also, nicht einen besseren Weg, dann ist dies zu tun, wie ein servlet?entweder neu anordnen die Reihenfolge oder fügen Sie
<dispatcher>FORWARD</dispatcher>
zu filter-mapping.InformationsquelleAutor BalusC
Könnten Sie die gebrauchsfertige Url-Rewrite Filter mit einer Regel wie dieser hier:
Überprüfen Sie die Beispiele für mehr... Beispiele.
InformationsquelleAutor Pascal Thivent
Einer einfachen JSF Url Prettyfier filter basiert, die in den Schritten BalusC Antwort. Der filter leitet alle Anfragen beginnend mit der /ui-Pfad (vorausgesetzt, Sie haben alle Ihre xhtml-Dateien dort gespeichert) auf den gleichen Pfad, aber das hinzufügen der xhtml-suffix.
InformationsquelleAutor Xtreme Biker