So fügen Sie eine filter-Klasse in den Frühling Starten?
Frage ich mich, wenn es gibt keine Anmerkungen für eine Filter
Klasse (für web-Anwendungen) in den Frühling Starten? Vielleicht @Filter
?
Möchte ich hinzufügen, einen benutzerdefinierten filter in meinem Projekt.
Die Spring-Boot-Reference Guide erwähnt
FilterRegistrationBean
, aber ich bin mir nicht sicher, wie es zu benutzen.
Beachten Sie, dass der Filter mit @WebFilter verhält sich nicht wie ein echter filter in der Servlet spec. Es wird ein spring-bean aufgerufen, nachdem eine Menge von anderen spring-Bean und nicht wie echte Filter vor jedem servlet-code.
können Sie mir sagen, Sie genaue Anforderung. Wenn Sie möchten, Filterklassen für ComponentScan dann gibt es einen Kommentar für das "@ComponentScan.Filter"
können Sie mir sagen, Sie genaue Anforderung. Wenn Sie möchten, Filterklassen für ComponentScan dann gibt es einen Kommentar für das "@ComponentScan.Filter"
InformationsquelleAutor janetsmith | 2013-11-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einrichten möchten ein third-party-filter, die Sie verwenden können
FilterRegistrationBean
.Zum Beispiel das äquivalent von web.xml
Diese werden die zwei Bohnen in Ihren
@Configuration
DateiDen oben getestet wurde mit spring-boot-1.2.3
Fügen Sie einfach eine zusätzliche @Bean public FilterRegistrationBean additionalFilterRegistration()
Woher weiß man die Reihenfolge, in der die Filter angewendet werden?
FilterRegistrationBean.setOrder
Sie brauchen keine filter bean beim Aufruf der Methode
someFilter()
direkt.InformationsquelleAutor Haim Raman
Hier ist ein Beispiel für eine Methode, einschließlich einer benutzerdefinierten filter in eine Spring-Boot-MVC-Anwendung. Werden Sie sicher, dass das Paket in einer Komponente scan:
Sollten die filter werden irgendwo registriert?
Als ich versuchte, der Ansatz, Filter erstellt wurde, als Bohne und sogar injiziert wurde, um anderen in der Klasse aber init () - Methode nicht ausgeführt werden. Wahrscheinlich, init() funktioniert nur in "normalen" Anmeldung nicht durch spring-container. Ich denke, man kann PostConstruct statt init() aber ich habe nicht versucht, dass, als ich mich weigerte zu deklarieren Filter als Spring-bean.
Ich bin aus der Schleife, was ist der Witz hier?
href="http://www.gnuterrypratchett.com/" >gnuterrypratchett.com
InformationsquelleAutor tegatai
Gibt es nicht eine spezielle annotation, um eine servlet-filter. Sie einfach erklären ein
@Bean
TypFilter
(oderFilterRegistrationBean
). Ein Beispiel (das hinzufügen von benutzerdefinierte header zu allen Antworten) ist im Boot die eigene EndpointWebMvcAutoConfiguration;Wenn Sie nur deklarieren Sie eine
Filter
es wird angewendet, um alle Anfragen. Wenn Sie auch hinzufügen, eineFilterRegistrationBean
können Sie zusätzlich angeben, einzelne servlets und url-Muster zu gelten.Hinweis:
Als der Spring-Boot-1.4,
FilterRegistrationBean
ist nicht veraltet und einfach bewegt-Pakete vonorg.springframework.boot.context.embedded.FilterRegistrationBean
zuorg.springframework.boot.web.servlet.FilterRegistrationBean
Spring Boot wird nicht funktionieren mit Servlet 2.5 und es ist nicht wirklich viel Unterstützung für JSP-noch. Ich bin nicht wirklich ein gradler, also ich weiß nicht, was Sie zu tun versuchen. Was ist falsch mit "kompilieren"? Funktioniert es, wenn du einfach nur abhängen "spring-boot-starter-web"? (Ich glaube nicht, dass diese Fragen im Zusammenhang mit der ursprünglichen Frage, obwohl, so sollten Sie vielleicht nochmal posten mit den neuen Fragen?)
Ich habe ein filter durch die Implementierung von Filter-Schnittstelle, aber Eclipse ist nicht zu finden der Schnittstelle. So versuche ich herauszufinden, wie man es zum classpath zum kompilieren.
Ja, natürlich müssen Sie
Filter
auf Ihren Klassenpfad ein. Normalerweise würde ich nur verwendenspring-boot-starter-web
zu ziehen in allen relevanten depdendencies (z.B. hier).404 auf der EndpointWebMvcAutoConfiguration link
InformationsquelleAutor Dave Syer
Es gibt drei Möglichkeiten, um Ihre filter,
@Component
@Bean
mitFilter
Art im Frühjahr@Configuration
@Bean
mitFilterRegistrationBean
Art im Frühjahr@Configuration
Entweder #1 oder #2 wird tun, wenn Sie möchten, dass Ihre filter, um alle Anforderungen ohne Anpassung, verwenden Sie #3 sonst. Sie brauchen nicht, um anzugeben, component-scan für die #1 zu arbeiten, solange Sie Ihren filter-Klasse im gleichen oder sub-Paket, das Ihre
SpringApplication
Klasse. Für #3, sowie #2 ist nur erforderlich, wenn Sie möchten, Frühling verwalten Sie Ihre filter-Klasse wie haben es auto-verdrahtete Abhängigkeiten. Es funktioniert gut für mich, um meine neue filter, die braucht keine Abhängigkeit autowiring/Injektion.Obwohl die Kombination von #2 und #3 funktioniert einwandfrei, ich war überrascht, dass es nicht am Ende mit zwei Filter, die Anwendung zweimal. Meine Vermutung ist, dass der Frühling vereint die zwei Bohnen als ein, wenn es ruft die gleiche Methode zu erstellen, die beide von Ihnen. In Fall, dass Sie wollen, verwenden Sie #3 allein mit authowiring, können Sie
AutowireCapableBeanFactory
. Das folgende ist ein Beispiel,Filter
während der VerwendungFilterRegistrationBean
Tolle Antwort. Das ist genau das, was habe ich doch!!
InformationsquelleAutor barryku
UPDATE: 2017-12-16:
Gibt es 2 einfache Möglichkeiten, dies zu tun in Spring Boot 1.5.8.RELEASE, keine Notwendigkeit für XML.
Erste Möglichkeit:
Wenn Sie haben noch keine spacific URL-Muster, die Sie verwenden können, @Komponente wie folgt:
(Vollständige code und die details sind hier https://www.surasint.com/spring-boot-filter/)
Zweite Möglichkeit:
Wenn Sie möchten, verwenden Sie url-Muster, die Sie verwenden können, @WebFilter wie diese:
(Vollständige code und die details sind hier https://www.surasint.com/spring-boot-filter-urlpattern/)
Aber Sie müssen auch hinzufügen @ServletComponentScan annotation in @SpringBootApplication Klasse:
Beachten Sie, dass die @ - Komponente ist die Spring-annotation, aber @WebFilter nicht. @WebFilter ist Servlet-3-Anmerkung.
Beide Richtungen, Sie müssen nur grundlegende Spring-Boot-Abhängigkeit in pom.xml (keine Notwendigkeit für explizite embedded tomcat jasper)
WARNUNG: Der erste Weg, wenn der Controller im Frühjahr Boot zurück, um eine JSP-Datei, wird die Anforderung übergeben wird, wird der filter zweimal.
Während in der zweite Weg, der Antrag wird den filter passieren nur einmal.
Ich bevorzuge die zweite Möglichkeit, weil es ist ähnlich wie Standard-Verhalten in der Servlet-Spezifikation (https://docs.oracle.com/cd/E19879-01/819-3669/6n5sg7b0b/index.html)
Können Sie mehr sehen, test hier anmelden https://www.surasint.com/spring-boot-webfilter-instead-of-component/
InformationsquelleAutor Surasin Tancharoen
Hier ist ein Beispiel meiner custom-Filter-Klasse:
Und ich habe es auf die Spring-boot-Konfiguration, indem Sie auf Configuration-Klasse wie folgt:
InformationsquelleAutor DPancs
Vom Frühjahr docs,
Eingebettete servlet-Container, Fügen Sie ein Servlet, Filter oder Listener an eine Anwendung
ZB:
Fügen Sie diese
@Bean
config zu Ihrem@Configuration
Klasse und filter eingetragen werden, beim Start.Auch Sie können Servlets, Filter und Listener mithilfe von classpath-Scans,
InformationsquelleAutor Lucky
Wenn Sie Spring Boot + Spring Security, können Sie dies in den security-Konfiguration.
In dem unten angeführten Beispiel, ich bin das hinzufügen eines benutzerdefinierten filter vor der UsernamePasswordAuthenticationFilter (siehe alle Standard-Spring-Security-Filter und deren Reihenfolge).
Und den filter, Klasse
InformationsquelleAutor Andrei Epure
Über die @WebFilter annotation, kann das wie folgt getan werden:
InformationsquelleAutor KayV
Können Sie @WebFilter javax.- servlet.Anmerkung.WebFilter auf eine Klasse, die javax.- servlet.Filter
Dann verwenden Sie @ServletComponentScan registrieren
InformationsquelleAutor Cwrwhaf
Sah ich eine Menge Antworten hier, aber ich habe nicht versucht, einer von Ihnen. Ich habe nur den filter erstellt, wie in dem folgenden code.
Und leaved die restlichen Spring-Boot-Anwendung, wie es war.
InformationsquelleAutor Shaaban Ebrahim
Es ist mehr ein Ratschlag als eine Antwort, aber wenn Sie einen Spring MVC in einer Webanwendung die gute Idee ist die Verwendung von Spring HandlerInterceptor statt Filter
Kann es die gleiche Arbeit, aber auch
- Kann die Arbeit mit ModelAndView
- Seine Methoden können aufgerufen werden, die vor und nach der Verarbeitung von Anfragen oder nach Anforderung abgeschlossen.
- Es kann leicht geprüft werden,
1 Implementieren Sie HandlerInterceptor-Schnittstelle, und fügen Sie eine @Component-annotation an deine Klasse
2 Konfigurieren Sie Ihr Interceptor
InformationsquelleAutor Vasily Komarov
können Sie auch einen filter mit @WebFilter und Filter implementiert, der es tun wird.
InformationsquelleAutor Muni
Erste, hinzufügen
@ServletComponentScan
zu Ihrem SpringBootApplication Klasse.Zweite, erstellen Sie einen filter, Datei-Filter erweitern oder Drittanbieter-filter-Klasse und hinzufügen von
@WebFilter
zu dieser Datei wie folgt:InformationsquelleAutor oaoit
Müssen Sie implementieren, Filter und müssen annotiert mit @WebFilter(urlPatterns="/*")
Und in der Anwendung oder Configuration-Klasse, die Sie hinzufügen müssen @ServletComponentScan
Dadurch ist es der filter registriert ist.
InformationsquelleAutor Rahul Anand
Sah ich die Antwort von @Wassili Komarov. Ähnlicher Ansatz, aber mit abstrakten HandlerInterceptorAdapter - Klasse anstelle von HandlerInterceptor.
Hier ist ein Beispiel...
InformationsquelleAutor Shaunak Patel
Wie Sie alle wissen, Spring Boot ist ein wunderbarer Weg der Entwicklung einer WebApp oder StandaloneApp mit minimaler Konfiguration und rechthaberisch Setup.
Dies ist, wie ich erreicht haben, eine Web-Filter-Entwicklung im Spring-Boot-Anwendung
Spring Boot-version: 2.0.4.RELEASE
Java-Version: 8.0
Servlet Spezifikation: Servlet 3.0 (Obligatorisch und Wichtig)
Als ich erklärte, dass mein Web-Filter in der folgenden Weise, die Einhaltung Servlet-Spezifikationen 3.0
Dies ist die Programmgesteuerte Möglichkeit, einen Filter zu definieren, der als Ersatz für web.xml basierte Definitionen.
"@Webfilter" annotation wird vom container verarbeitet werden, die bei der Bereitstellung der Filter-Klasse, in der es gefunden wird, erstellt werden, wie pro die Konfiguration und angewandt, um die URL-Muster, javax.- servlet.Servlets und javax.- servlet.DispatcherTypes.
Bereitstellen Spring-Boot-Anwendung, die als "Traditionelle KRIEG", der application-Klasse sollte verlängern SpringBootServletInitializer.
HINWEIS::
SpringBootServletInitializer ist eine "Programmatische Umsetzung" web.xml mit Verweis auf den Servlet-3.0+ - Spezifikationen, die eine Umsetzung von WebApplicationInitializer.
So, SpringBootApplication nicht erforderlich "web.xml" als Anwendungsklasse (nach Verlängerung SpringBootServletInitializer) scans für
- @WebFilter,
- @WebListener und
- @WebServlet.
Diese annotation ermöglicht scanning-Basis-Pakete für die web-Komponenten annotiert mit @WebFilter, @WebListener und @WebServlet.
Aufgrund der Tatsache, dass embedded-Container nicht support @WebServlet, @WebFilter und @WebListener annotations, Spring Boot, und verlassen sich stark auf embedded-Container, der Einführung dieser neuen annotation @ServletComponentScan zur Unterstützung abhängigen jar-Dateien, verwenden Sie diese 3 Anmerkungen.
Scan wird nur ausgeführt, wenn über einen eingebetteten Servlet-container.
Hier: ich habe eine Benutzerdefinierte Klasse: "ServletInitializer" die sich Klasse: SpringBootServletInitializer.
Wie zuvor erläutert, SpringBootServletInitializer ist zuständig für das Scannen Anmerkungen:-
- @WebFilter,
- @WebListener und
- @WebServlet.
Und damit die Spring-Boot-Anwendung Klasse sollte
InformationsquelleAutor Philip Dilip
Filter wie der name andeutet verwendet, um das filtern auf, die entweder die Anforderung an eine Ressource oder auf die Antwort von einer Ressource, oder beides. Spring Boot bietet einige Optionen zum registrieren von benutzerdefinierten Filter in der Spring-Boot-Anwendung. Schauen wir uns die verschiedenen Optionen.
1. Definieren Spring-Boot-Filter und Aufruf, Um
Implementieren Filter-Schnittstelle, um einen neuen filter anzulegen, die im Frühjahr Starten.
Lasst uns schnell einen Blick auf einige wichtige Punkte im obigen code
Feuer-Filter in der richtigen Reihenfolge–wir nötig, um die @Um annotation.
In dem obigen code, CustomFirstFilter wird ausgeführt, bevor die CustomSecondFilter.
2. URL-Muster
Wenn das übereinkommen-basierte mapping ist nicht flexibel genug, wir können FilterRegistrationBean für die vollständige Steuerung der Anwendung. Hier, nicht verwenden @Komponente - Anmerkung für die filter Klasse, aber registrieren Sie den filter mit Hilfe eines FilterRegistrationBean.
Registrieren Sie benutzerdefinierte Filter mit Hilfe FilterRegistrationBean.
InformationsquelleAutor Yogesh
Filter werden meistens in der logger-Dateien unterscheidet sich je nach logger, die Sie mit in das Projekt
Laß mich erklären, für log4j2:
Filter werden verwendet, um die Daten einzuschränken, die und ich verwendet Schwelle filter weiter einschränken, um die Ebenen der Daten in der Strömung erwähnte ich, dass die Ebenen, die beschränkt werden kann, ist es über.
Für Ihre weitere refrence finden Sie die Ebene, um von log4j2 - Log4J Ebenen: ALLE > TRACE > DEBUG > INFO > WARNEN > ERROR > FATAL > OFF
FilterRegistrationBean
wie in der Frage genannten ist fürjavax.servlet.Filter
diese Antwort spricht überorg.apache.logging.log4j.core.Filter
InformationsquelleAutor saravanan