2012-05-06 21 views
6

tôi sử dụng lò xo an ninh để bảo đảm trang web của tôi, khi tôi đang học nó vào mùa xuân-roo tạo tập tin cấu hình trong applicationContext-security.xml, trong <http> nút:Bảo mật mùa xuân không thể khớp với định dạng "tham số"?

<intercept-url pattern="/userses?form" access="hasRole('ROLE_ADMIN')" /> 

Nó có nghĩa là khi bạn muốn tạo đối tượng Người dùng, trước hết bạn cần phải đăng nhập để nhận được quyền ADMIN. Nhưng thực ra nó không hoạt động. Kiểm tra nhật ký:

2012-05-06 11:39:11,250 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/userses'; against '/userses?form' 

Khuôn khổ sử dụng/người dùng thay vì/người dùng? Để so sánh, quy trình xác thực bị bỏ qua như chuỗi không khớp. Để xác minh điều này tôi cũng thử một url:

<intercept-url pattern="/userses/abc" access="hasRole('ROLE_ADMIN')" /> 

tôi yêu cầu/userses/abc, nó phát hiện người sử dụng không được ủy quyền, và chuyển đến/trang đăng nhập, kiểm tra nhật ký:

2012-05-06 11:46:44,343 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/uesrses/abc'; against '/userses/abc' 

Vì vậy, câu hỏi của tôi là: Không hỗ trợ mùa xuân 3 "hỗ trợ" tham số "mô hình hoặc tôi bị mất một cái gì đó để cấu hình để hỗ trợ này? PS: Tất cả các mã được tạo ra bởi roo mà không sửa đổi, cũng tự hỏi tại sao nó không hoạt động.

Trả lời

6

Theo mặc định spring security sử dụng đối sánh kiểu kiến, không khớp với thông số. phù hợp với regex, tuy nhiên, có thể trận đấu trên các thông số

Cố gắng xác định nó như vậy:

<http request-matcher="regex"> 
    <security:intercept-url pattern="\A/userses\?form.*\Z" access="hasRole('ROLE_ADMIN')" /> 
</http> 

Không biết tại sao Roo không làm điều này tự động. Có vẻ như nó nên.

+0

Cảm ơn bạn đã phản hồi. Một câu hỏi khác tôi nghĩ có lẽ bạn biết câu trả lời. Phương thức @Secure không hoạt động đối với tôi. Tôi đã thêm thẻ vào applicationContext-security.xml và sửa đổi tệp pom.xml để đáp ứng sự phụ thuộc, phía trên phương thức trong bộ điều khiển, tôi đã thêm @Secured ("ROLE_ADMIN") nhưng không có vấn đề gì vai trò tất cả mọi người có thể truy cập các phương pháp, bất cứ điều gì sai? @Secured ("ROLE_ADMIN") @RequestMapping (giá trị = "abc", phương thức = RequestMethod.GET, tạo = "text/html") chuỗi công cộng create() { trả về Users.getString(); // myCreate (); } – JerryCai

+0

@JerryCai Có lẽ bạn nên mở ra một câu hỏi mới. Rất khó để đọc mã trong các bình luận, và nó sẽ giúp người khác với cùng một vấn đề nếu họ có thể tìm thấy nó như là một câu hỏi riêng biệt trên SO. –

+0

Ok, tôi sẽ làm điều đó, cảm ơn. – JerryCai

6

Hành vi đó được xác định bằng cách sử dụng "request-matcher". Như được chỉ dẫn bởi tài liệu, mặc định là "kiến", cho biết sử dụng một số AntPathRequestMatcher và một thay thế là "regex", RegexRequestMatcher. Các javadocs (được liên kết) đưa ra các chi tiết cụ thể về các trình so khớp, bao gồm thực tế là các đối sánh trước đó khớp với "servletPath + pathInfo" của yêu cầu, và sau đó phản đối "servletPath + pathInfo + queryString" của yêu cầu.

+0

Điều Tim cho biết: bắt đầu một câu hỏi mới. Đừng cố đặt câu hỏi vào nhận xét. –

+0

Ok, tôi sẽ làm điều đó, cảm ơn. – JerryCai

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