web.xml - Java-Servlet-Filter - Nicht ausgeführt, bevor die Verarbeitung der JSP-Seite (auf Tomcat)
Ich ziemlich neu bin, Servlet-Filter und haben im Grunde trat Sie ein Projekt mit Ihnen und einem zusätzlichen filter für die web.xml
- Datei (bereitgestellt auf Tomcat 5.5).
Ich bin zu 95% sicher, dass es irgendwann richtig gearbeitet wurde, aber nun beim Debuggen, wenn ich die Haltepunkte an der Spitze der JSP-Seite bin ich versucht, Aussicht (login.jsp
), es ist die template Seite (page.jsp
) und sowohl innerhalb des konfigurierten filters doFilter()
Methode; es läuft durch die ganze login.jsp
Seite (von oben nach unten), dann page.jsp
- und die beginnt mit der Verarbeitung der Filter.
Ich es brauchen, um die Filter erst, seit einer von Ihnen bestimmt die Sprache die Seite angezeigt werden sollen (Kontrolle von cookies, db-Einstellungen und browser-Einstellungen) das sollte dann für die login.jsp
.
Hat jemand irgendwelche Vorschläge, was könnte schief gehen?
Es ist eine Menge code könnte ich posten, aber ich bin nicht davon überzeugt, dass die würde von nutzen sein, da es alle arbeiten nur in der falschen Reihenfolge.
Ausschnitte aus der web.xml:
<web-app>
...
<filter>
<filter-name>SetSecurityContextFilter</filter-name>
<filter-class>
com.section2.SecurityContextServletFilter
</filter-class>
</filter>
<filter>
<filter-name>SetLocaleFilter</filter-name>
<filter-class>
com.section2.locale.LocaleServletFilter
</filter-class>
</filter>
<filter>
<filter-name>trinidad</filter-name>
<filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
</filter>
<filter>
<filter-name>ActiveUserFilter</filter-name>
<filter-class>com.section2.ActiveUserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>trinidad</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>SetSecurityContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetLocaleFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ActiveUserFilter</filter-name>
<url-pattern>/pages/section2/user/*</url-pattern>
</filter-mapping>
...
</web-app>
Vielen Dank im Voraus.
- Sie hatte einen Blick auf java.sun.com/products/servlet/Filters.html und tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/... ? Ohne zu wissen, was Sie tun, es ist schwer, sich vorzustellen, was schief gelaufen ist. Haben Sie versucht, eine andere servlet container wie jetty?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie ist die
Filter
code organisiert? Sind Sie vielleicht anruft erstenFilterChain#doFilter()
und erst danach tun die benötigte Logik?Dank für Eure Antworten - ich habe jetzt verstanden, das Problem vollständig...es geschieht nur für die Anmeldung.jsp-Seite, keine der anderen Seiten. Und in meinem Fall, die
login .jsp
Seite ist ein Sonderfall, denn es ist in der Regel angesehen als ein Ergebnis einer Umleitung.In der
web.xml
:Und ich vermute, deswegen sind die Filter nicht schlagen Sie in der üblichen Reihenfolge! Hinzugefügt einen Anruf von der login-Seite zu tun, was der filter macht und alles ist gut.
Nochmals vielen Dank.
Dem Grund, dass der filter nicht genannt für die Anmeldung.jsp ist, dass Tomcat die interpretation der spec ist, dass die Authentifizierung ist Teil der container, die nicht Teil der webapp, und so tritt außerhalb der Rolle von filtern. Daher werden Filter nicht angewendet, um die login-Seite (login.jsp in diesem Fall) oder j_security_check.
ref: https://issues.apache.org/bugzilla/show_bug.cgi?id=21795 - der Titel verweist nur auf j_security_check, aber die Diskussion umfasst die ganze form-basierte Authentifizierung Mechanismus.
Einen offensichtlichen Fehler in der trinidad-filter-mapping. Es sollte nicht über eine servlet-name, sondern ein url-Muster.
Ich hatte das gleiche problem, als ich schrieb:
statt