2014-07-25 27 views
5

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 //* đượ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

4

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 /*/** trừ trường hợp người cuối cùng bắt tất cả các ký tự đại diện.

9

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.

0
@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 "/ *"

Các vấn đề liên quan