Tôi hơi nhầm lẫn với mẫu URL trong bảo mật mùa xuân. Bởi vì, trong bảo mật http lõi của servlet, các mẫu url /
và /*
được sử dụng để chỉ định một hoặc nhiều thư mục. /
được sử dụng cho một thư mục và /*
được sử dụng trong nhiều thư mục. Nhưng vào mùa xuân an ninh, các /**
cũng được giới thiệu, mục đích chính của /**
url-mẫu trong an ninh là gì.Spring-Security: Sự khác biệt giữa/** và/* mẫu url trong Spring-Security
Trả lời
Theo tài liệu Xuân An mục đích chính của /**
là để bắt-tất cả các kí hiệu:
Trong thực tế, chúng tôi khuyên bạn nên sử dụng bảo mật phương pháp tại lớp dịch vụ của bạn, để kiểm soát quyền truy cập vào ứng dụng của bạn, và không hoàn toàn dựa vào việc sử dụng các ràng buộc an ninh được xác định ở cấp ứng dụng web. URL thay đổi và rất khó để tính đến tất cả các URL có thể mà ứng dụng có thể hỗ trợ và cách yêu cầu có thể được điều chỉnh. Bạn nên cố gắng và hạn chế bản thân để sử dụng một vài đường dẫn kiến đơn giản mà rất đơn giản để hiểu. Luôn cố gắng sử dụng cách tiếp cận “từ chối theo mặc định” trong đó bạn có một ký tự đại diện bắt được tất cả (/ ** hoặc **) đã xác định quyền truy cập cuối cùng và từ chối.
Chúng ta cũng không nên quên rằng
Patterns luôn được đánh giá theo thứ tự chúng được xác định. Do đó điều quan trọng là các mẫu cụ thể hơn được xác định cao hơn trong danh sách hơn các mẫu ít cụ thể hơn.
Như vậy chúng ta có thể có một cái gì đó như thế này:
<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>
có nghĩa là cho tất cả các yêu cầu chúng tôi sẽ cần quyền AUTH_SYSTEM_LOGIN, nhưng đặc biệt cho/phần còn lại phục vụ/báo cáo/xuất khẩu/xml người dùng sẽ cần AUTH_REPORT_EXPORTXML cũng như quyền được xác định ở trên. Khi họ cũng nói rằng nó là tốt hơn không chỉ dựa vào điều này ép an ninh có nghĩa là nó là tốt cũng để nhân đôi những phương pháp dịch vụ với chú thích bảo đảm như thế này:
@Secured("AUTH_REPORT_EXPORTXML")
Nói chung như tôi hiểu không có sự khác biệt giữa /*
và /**
trừ trường hợp người cuối cùng bắt tất cả các ký tự đại diện.
Sự khác biệt giữa/* &/** là số thứ hai khớp với toàn bộ cây thư mục, bao gồm thư mục con, trong đó/* chỉ khớp với cấp được chỉ định tại.
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
.antMatchers(HttpMethod.GET, "/**").permitAll
.antMatchers(HttpMethod.POST, "/*").permitAll
// ...
}
Trong cấu hình này bất kỳ "Nhận" yêu cầu sẽ được cho phép, ví dụ:
- /cuốn sách
- /cuốn sách/20
- /cuốn sách/20/tác giả
Vì vậy, tất cả các url này khớp với văn bản có mẫu "/ **".
url phép cho "bài":
- /cuốn sách
- /tạp chí
url ở trên phù hợp với "/ *"
- 1. Kết hợp DispatcherServlet, ContextLoaderListener và SpringSecurity
- 2. SpringSecurity UserDetailsService nhận mật khẩu
- 3. Vô hiệu hóa logic lưu trữ SavedRequest của SpringSecurity
- 4. Sự khác biệt giữa URL và URI?
- 5. Bỏ qua trường hợp tên người dùng trong SpringSecurity
- 6. Sự khác biệt giữa window.location.assign (url) và window.open (url, '_self')
- 7. Sự khác biệt giữa url vs urlRoot
- 8. Sự khác biệt giữa google() và maven {url 'https://maven.google.com'}
- 9. Sự khác biệt giữa rel = "canonical" và og: url?
- 10. Sự khác biệt giữa. và #
- 11. Sự khác biệt giữa Proxy và Mẫu trang trí
- 12. Sự khác biệt giữa mẫu và đường dẫn là gì?
- 13. Sự khác biệt giữa $ (...) và `...`
- 14. Sự khác biệt giữa = và: =
- 15. Sự khác biệt giữa $ * và $ @
- 16. Sự khác biệt giữa mẫu thiết kế Singleton và Registry
- 17. Sự khác biệt giữa kiểu và mẫu kiểm soát
- 18. Sự khác biệt giữa ". +" Và ". +?"
- 19. Sự khác biệt giữa "**/* /" và "** /"?
- 20. Sự khác biệt giữa $ # và $ {# @}
- 21. Sự khác biệt giữa encodeURL và encodeRedirectURL
- 22. Sự khác biệt giữa '.' và "." trong java
- 23. Sự khác biệt giữa. và: trong Lua
- 24. sự khác biệt giữa 'và "trong JavaScript?
- 25. Sự khác biệt giữa! và !! trong yaml?
- 26. Sự khác biệt giữa $ {} và $() trong Bash
- 27. Sự khác biệt giữa $ @ và $! trong perl
- 28. sự khác biệt giữa $ .getJSON và $ .get
- 29. Sự khác biệt giữa .ContextMenu và .ContextMenuStrip
- 30. Sự khác biệt giữa sự khác biệt giữa nhiệm vụ jar và lắp ráp