2016-07-02 8 views
1

Ich schreibe eine Webanwendung in Spring Boot, die einen Filter hat, der nach Frühjahrs Sicherheitsfilter ausführen muss.Spring Boot Filter Reihenfolge: WebLogic 12c vs Tomcat 8

Ich habe meine Filterkette über Java-Config konfiguriert und habe die Reihenfolge meines benutzerdefinierten Filters auf einen höheren Wert als Federsicherheit eingestellt. Dies funktioniert wie erwartet, wenn die Anwendung auf Tomcat ausgeführt wird. In WebLogic 12c funktioniert dies jedoch nicht. WebLogic führt die Filterkette in umgekehrter Reihenfolge aus, wie Tomcat sie ausführt (und/oder umgekehrt).

Hat jemand diese eigentümliche Eigenart schon mal erlebt? Gibt es eine Möglichkeit, WebLogic so zu verhalten, wie es Tomcat tut?

Mein Code:

final FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter()); 
registration.setOrder(-99); // spring security's is -100 

auf Tomcat, diese MyFilter Brände nach den Sicherheitsfilter. In WebLogic wird MyFilter vor den Sicherheitsfiltern ausgelöst. Wenn ich den Wert von setOrder auf -101 ändere, dann funktioniert es für WebLogic, aber nicht für Tomcat.

Ich möchte die Anwendung je nach Kontext auf beiden App-Servern ausführen, also muss ich herausfinden, wie dies funktioniert.

+0

Ich denke, ich habe das schon einmal gesehen und es stellte sich heraus, dass es ein Fehler in Weblogic –

Antwort

5

Es gibt einen Fehler in WebLogic: "20493506: WLS 12.1.2 - Servlet 3 addFilter fügt Filter in falscher Reihenfolge hinzu".

Das Spring Boot Team war vor einem Jahr made aware of this. Leider kann Spring Boot nichts dagegen tun. Hoffentlich ist 15 Monate plus lang genug, dass Oracle einen Fix geliefert hat, den Sie auf Ihre Weblogic-Installation anwenden können.

+0

Vielen Dank. https://support.oracle.com/epmos/faces/DocContentDisplay?id=1996257.1, für jeden, der über ein Oracle Support-Konto verfügt. – user636747

0

Nicht sicher, ob der Patch verfügbar ist oder unser Ops-Team es nicht angewendet hat, aber es ist immer noch für uns gebrochen. This ist die Lösung, die ich mir ausgedacht habe.