Ich bin ein bisschen verwirrt mit URL-Muster im Frühjahr Sicherheit. Da in der Servlet-Core-HTTP-Sicherheit die URL-Muster /
und /*
für die Angabe eines oder mehrerer Verzeichnisse verwendet werden. /
wird für ein Verzeichnis verwendet und /*
wird von vielen Verzeichnissen verwendet. Aber im Frühjahr-Sicherheit, die /**
wird auch eingeführt, was der Hauptzweck /**
URL-Muster in Sicherheit ist.Spring-Security: Unterschied zwischen/** und/* URL-Muster in Spring-Security
Antwort
Laut Dokumentation Spring Security des Hauptzweck der /**
ist Platzhalter-alle zu fangen:
In der Praxis empfehlen wir, dass Sie die Methode der Sicherheit an Ihrem Service-Layer verwenden, um den Zugriff auf Ihre Anwendung zu steuern und verlassen Sie sich nicht ausschließlich auf Sicherheitsbeschränkungen, die auf der Ebene der Webanwendung definiert sind. URLs ändern sich und es ist schwierig, alle möglichen URLs zu berücksichtigen, die eine Anwendung möglicherweise unterstützt, und , wie Anfragen manipuliert werden können. Sie sollten versuchen, und beschränken Sie sich auf die Verwendung ein paar einfache Ameisen Wege, die sind einfach zu verstehen. Versuchen Sie immer, einen "Deny-by-Default" -Ansatz zu verwenden, bei dem Sie den Catch-All-Platzhalter (/ ** oder **) als letzten definiert haben und den Zugriff verweigern.
Wir sollten auch nicht vergessen, dass
Muster werden in der Reihenfolge immer ausgewertet sie definiert sind. Daher ist es wichtig, dass spezifischere Muster in der Liste höher definiert sind als weniger spezifische Muster.
So können wir etwas davon haben:
<security:http pattern="/rest-service/**" authentication-manager-ref="authenticationManager" auto-config="false" access-decision-manager-ref="accessDecisionManager">
<security:intercept-url pattern="/rest-service/report/export/xml" access="AUTH_REPORT_EXPORTXML" />
<security:intercept-url pattern="/**" access="AUTH_SYSTEM_LOGIN" />
<security:http-basic />
</security:http>
, die für alle Anforderungen bedeutet, dass wir AUTH_SYSTEM_LOGIN Autorität brauchen, aber speziell für/Rest-Service/Bericht/export/xml der Benutzer müssen AUTH_REPORT_EXPORTXML-Berechtigung ebenfalls, weil sie oben definiert ist. Wie sie sagen auch ist es besser, nicht nur für diese Sicherheit Constraints verlassen, was bedeutet, dass es gut ist, auch so diejenigen, die in Service-Methoden mit gesicherter Anmerkung zu duplizieren:
@Secured("AUTH_REPORT_EXPORTXML")
Im Allgemeinen, wie ich es verstehe, ist kein Unterschied zwischen /*
und /**
mit der Ausnahme, dass der letzte alle Wildcards abfängt.
Der Unterschied zwischen/* &/** ist, dass die zweite der gesamten Verzeichnisstruktur einschließlich der Unterverzeichnisse entspricht, wobei// nur auf der angegebenen Ebene übereinstimmt.
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
.antMatchers(HttpMethod.GET, "/**").permitAll
.antMatchers(HttpMethod.POST, "/*").permitAll
// ...
}
In dieser Konfiguration jeden "Get" Anfrage erlaubt werden, zum Beispiel:
- /Buch
- /Buch/20
- /Buch/20/Autor
Also stimmen alle URLs Text mit Muster "/ **".
Zulässige Urls für "Beitrag":
- /Buch
- /Magazin
Urls über Spiel mit "/ *"
- 1. DispatcherServlet, Context und SpringSecurity
- 2. Benutzernamen in SpringSecurity ignorieren
- 3. tun etwas nach AuthenticationProvider Erfolg in SpringSecurity
- 4. SpringSecurity WithSecurityContext MockMvc OAuth2 immer unbefugt
- 5. Kann die Methode nicht lösen SpringSecurity
- 6. Migration von SpringMVC + SpringSecurity zu AngularJS + SpringSicherheit + SpringMVC
- 7. Authentifizieren Sie Benutzer mit SpringSecurity über einen WebService, der einen Benutzernamen und ein Kennwort benötigt
- 8. Grails mit SpringSecurity, überprüfen, ob der aktuelle Benutzer auf Controller/Aktion zugreifen kann
- 9. SpringSecurity - Notwendigkeit, eine neue sessionId bei jedem versuchten Login zu erstellen
- 10. Unterschied zwischen `% in%` und `==`
- 11. Unterschied zwischen $ @ und $! in Perl
- 12. Unterschied zwischen '.' und "." in Java
- 13. Unterschied zwischen $ {} und $() in Bash
- 14. Unterschied zwischen und „-“ in r
- 15. Unterschied zwischen .. und ... in Ruby
- 16. Unterschied zwischen "" und "" in Python
- 17. Unterschied zwischen // und /// in C#
- 18. Unterschied zwischen. und #
- 19. MySQL: Unterschied zwischen ', `,' und '
- 20. C++ Unterschied zwischen '//' und '///'
- 21. Unterschied zwischen String.Empty und ""
- 22. Unterschied zwischen = und: =
- 23. Unterschied zwischen Vorzeichen & und *?
- 24. VBA: Unterschied zwischen & und +
- 25. Unterschied zwischen "**/* /" und "** /"?
- 26. Unterschied zwischen $ # und $ {# @}
- 27. Unterschied zwischen '#', '%' und '$'
- 28. Unterschied zwischen numpy.logical_and und &
- 29. Unterschied zwischen // und http: //
- 30. Unterschied zwischen -Wconversion zwischen gcc und g ++