Oversikt og behov for delegering av FilterProxy om våren

1. Oversikt

De DelegeringFilterProxy er et servletfilter som gjør det mulig å overføre kontroll til Filter klasser som har tilgang til vårapplikasjonskonteksten. Spring Security stoler sterkt på denne teknikken.

I denne opplæringen vil vi dekke det i detalj.

2. DelegeringFilterProxy

Javadoc for DelegeringFilterProxy sier at det er en

Proxy for et standard Servlet-filter, delegering til en fjærstyrt bønne som implementerer filtergrensesnittet.

Når vi bruker servletfiltre, må vi åpenbart erklære dem som en filterklasse i vår Java-config eller web.xml, ellers vil servletbeholderen ignorere dem. Vårens DelegeringFilterProxy gir koblingen mellom web.xml og søknadssammenheng.

2.1. Internt arbeid av DelegeringFilterProxy

La oss ta en titt på hvordan DelegeringFilterProxy overfører kontrollen til vårbønnen.

Under initialisering, DelegeringFilterProxy henter filter-navn og henter bønnen med det navnet fra Spring Application Context. Denne bønnen må være av type javax.Servlet.Filter, dvs. et "normalt" servletfilter. Innkommende forespørsler vil da bli sendt til denne filterbønnen.

Kort oppsummert, DelegeringFilterProxydoFilter () metoden vil delegere alle anrop til en vårbønne, slik at vi kan bruke alle vårfunksjonene i filterbønnen.

Hvis vi bruker Java-basert konfigurasjon, registreres filterregistreringen vår ApplicationInitializer vil bli definert som:

@ Override beskyttet javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = ny DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("applicationFilter"); returner nytt Filter [] {delegateFilterProxy}; }

Hvis vi bruker XML, i web.xml fil:

 applicationFilter org.springframework.web.filter.DelegatingFilterProxy 

Dette betyr at enhver forespørsel kan gjøres om å passere gjennom filteret definert som vårbønne med navnet applicationFilter.

2.2. Trenger DelegeringFilterProxy

DelegeringFilterProxy er en klasse i vårens nettmodul. Det gir funksjoner for å få HTTP-samtaler til å passere gjennom filtre før de når den faktiske destinasjonen. Med hjelp av DelegeringFilterProxy, en klasse som implementerer javax.Servlet.Filter grensesnittet kan kobles til filterkjeden.

Som et eksempel, bruker Spring Security DelegeringFilterProxy til slik at det kan dra nytte av Spring's funksjoner for avhengighetsinjeksjon og livssyklusgrensesnitt for sikkerhetsfiltre.

DelegeringFilterProxy utnytter også påkalle spesifikke eller flere filtre i henhold til Request URI-stier ved å gi konfigurasjonen i Spring's applikasjonskontekst eller i web.xml.

3. Opprette et tilpasset filter

Som beskrevet ovenfor, DelegeringFilterProxy er et servletfilter som delegerer til en spesifikk vårstyrt bønne som implementerer Filter Grensesnitt.

I de neste avsnittene oppretter vi et tilpasset filter og konfigurerer det ved hjelp av Java & XML-basert konfigurasjon.

3.1. Filterklasse

Vi skal lage et enkelt filter som logger forespørselsinformasjon før forespørselen fortsetter videre.

La oss først lage en tilpasset filterklasse:

@Component ("loggingFilter") offentlig klasse CustomFilter implementerer filter {privat statisk logger LOGGER = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig config) kaster ServletException {// initialiserer noe} @Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequ; LOGGER.info ("Be om informasjon:" + krav); chain.doFilter (forespørsel, svar); } @Override public void destroy () {// oppryddingskode, om nødvendig}} 

CustomFilter redskaper javax.Servlet.Filter. Denne klassen har en @Komponent kommentar for å registrere seg som vårbønne i applikasjonssammenheng. På denne måten, DelegeringFilterProxy klasse kan finne filterklassen vår mens den initialiserer filterkjeden.

Merk at navnet på vårbønnen må være det samme som verdien i filter-navn gitt under registreringen av det tilpassede filteret i ApplicationInitializer klasse eller i web.xml seinere fordi DelegatingFilterProxy klasse vil se etter filterbønnen med nøyaktig samme navn i applikasjonssammenheng.

Hvis den ikke finner en bønne med dette navnet, vil den heve et unntak ved oppstart av applikasjonen.

3.2. Konfigurere filteret via Java-konfigurasjon

For å registrere et tilpasset filter ved hjelp av Java-konfigurasjon, må vi overstyre getServletFilters () Metode av AbstractAnnotationConfigDispatcherServletInitializer:

offentlig klasse ApplicationInitializer utvider AbstractAnnotationConfigDispatcherServletInitializer {// noen andre metoder her @Override beskyttet javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = new DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("loggingFilter"); returner nytt Filter [] {delegateFilterProxy}; }}

3.3. Konfigurere filteret via web.xml

La oss se hvordan filterkonfigurasjonen i web.xml ser ut som:

 loggingFilter org.springframework.web.filter.DelegatingFilterProxy loggingFilter / * 

De filterklasse argumentet er av typen DelegeringFilterProxy og ikke filterklassen vi opprettet. Hvis vi kjører denne koden og treffer en hvilken som helst URL, så doFilter () metoden for CustomFilter blir henrettet og viser informasjonen om forespørselinformasjonen i loggfilen.

4. Konklusjon

I denne artikkelen har vi dekket hvordan DelegeringFilterProxy fungerer og hvordan du bruker den.

Spring Security bruker omfattende bruk av DelegeringFilterProxy for å sikre web-API-samtaler og ressurser fra uautorisert tilgang.

Kildekoden er tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found