Spring Security - beveiliging geen, filters geen, toegangsvergunning All
1. Overzicht
Spring Security biedt verschillende mechanismen om een verzoekpatroon als onbeveiligd te configureren of om alle toegang toe te staan. Afhankelijk van elk van deze mechanismen kan dit betekenen dat de beveiligingsfilterketen helemaal niet op dat pad wordt uitgevoerd of dat de filterketen wordt uitgevoerd en toegang wordt verleend.
2. access = "allowAll"
Een element met access = "allowAll" zal de autorisatie zo configureren dat alle verzoeken toegestaan op dat specifieke pad:
Of, via Java-configuratie:
http.authorizeRequests (). antMatchers ("/ login *"). allowAll ();
Dit wordt bereikt zonder de beveiligingsfilters uit te schakelen - deze werken nog steeds, dus alle aan Spring Security gerelateerde functionaliteit is nog steeds beschikbaar.
3. filters = "geen"
Dit is een pre-Spring 3.1-functie die was verouderd en vervangen in Spring 3.1.
De filters attribuut schakelt de Spring Security-filtersketen volledig uit op dat specifieke verzoekpad:
Dit kan problemen veroorzaken wanneer de verwerking van het verzoek enige functionaliteit van Spring Security vereist.
Aangezien dit een verouderde functie is van Spring-versies die nieuwer zijn dan 3.0, zal het gebruik ervan met Spring 3.1 resulteren in een runtime-uitzondering bij het opstarten:
ERNSTIG: Contextinitialisatie mislukt org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuratieprobleem: het gebruik van "filters = 'none'" wordt niet langer ondersteund. Definieer een apart element voor het patroon dat u wilt uitsluiten en gebruik het attribuut "security = 'none'". Overtredende bron: klassenpadbron [webSecurityConfig.xml] op o.s.b.f.p.FailFastProblemReporter.error (FailFastProblemReporter.java:68)
4. security = "geen"
Zoals we in het bovenstaande foutbericht hebben gezien, vervangt Spring 3.1 filters = "geen" met een nieuwe uitdrukking - security = "geen".
De scope is ook veranderd - dit wordt niet langer gespecificeerd bij het element niveau. In plaats daarvan staat Spring 3.1 toe meerdere elementen nog te definiëren - elk met zijn eigen configuratie van de beveiligingsfilterketen. En dus hoort het nieuwe beveiligingsattribuut nu op de element niveau.
In de praktijk ziet dit er als volgt uit:
Of met Java-configuratie:
web.ignoring (). antMatchers ("/ resources / **");
In plaats van het oude:
Gelijkwaardig aan filters = "geen", dit zal ook de beveiligingsfilterketen voor dat verzoekpad volledig uitschakelen - dus wanneer het verzoek wordt afgehandeld in de toepassing, zijn de Spring Security-functies niet beschikbaar.
Dit is geen probleem voor de bovenstaande voorbeelden, die voornamelijk betrekking hebben op voor statische bronnen - waar geen daadwerkelijke verwerking plaatsvindt. Als het verzoek echter op de een of andere manier programmatisch wordt afgehandeld, zijn beveiligingsfuncties zoals vereist-kanaal, is toegang tot de huidige gebruiker of het aanroepen van beveiligde methoden niet beschikbaar.
Om dezelfde reden heeft het geen zin om extra attributen op een element dat al is geconfigureerd met security = "geen" omdat dat verzoekpad onbeveiligd is en de attributen eenvoudigweg worden genegeerd.
Alternatief, access = 'IS_AUTHENTICATED_ANONYMOUSLY' kan worden gebruikt om anonieme toegang toe te staan.
5. Voorbehoud voor security = "geen"
Bij gebruik van meerdere elementen, sommige geconfigureerd met security = "geen"Houd er rekening mee dat de volgorde waarin deze elementen worden gedefinieerd belangrijk is. We willen het specifieke hebben paden eerst, volgden het universele patroon helemaal aan het einde.
Merk ook op dat, als een element specificeert geen patroon, dan wordt dat standaard toegewezen aan het universele overeenkomstpatroon - "/ **" - dus nogmaals, dit element moet de laatste zijn. Als de volgorde van de elementen niet correct is, is de het aanmaken van de beveiligingsfilterketen zal mislukken:
Veroorzaakt door: java.lang.IllegalArgumentException: een universeel overeenkomstpatroon ('/ **') wordt gedefinieerd vóór andere patronen in de filterketen, waardoor ze worden genegeerd. Controleer de volgorde in uw naamruimte of FilterChainProxy bean-configuratie op o.s.s.c.h.DefaultFilterChainValidator.checkPathOrder (DefaultFilterChainValidator.java:49) op o.s.s.c.h.DefaultFilterChainValidator.validate (DefaultFilterChainValidator.java:39)
6. Conclusie
Dit artikel bespreekt de opties om toegang tot een pad toe te staan met Spring Security - met de nadruk op de verschillen tussen filters = "none", security = "none" en access = "allowAll".
Zoals gewoonlijk zijn de voorbeelden beschikbaar op GitHub.