2013-05-27 53 views
6

Đối với một dự án, tôi cố gắng sử dụng Bảo mật mùa xuân 3.2 làm bảo mật cơ bản. Vì dự án này đã được thiết lập và đang chạy, tôi đã có một lớp bảo mật (riêng) khác. Do đó tôi đã tạo một trình xác thực tùy chỉnh để làm tan các lớp bảo mật. Hoạt động tốt, cho đến khi tôi cũng cần thiết để thực hiện một xác thực vô danh tùy chỉnh (Spring Security Documentation, chapter 13).Xác thực tùy chỉnhFilter Bảo mật mùa xuân 3.2

Vì vậy, tôi đã thực hiện một bộ lọc tùy chỉnh và loại bỏ các bộ lọc orignal:

<http request-matcher="regex" use-expressions="true"> 
    <anonymous enabled="false" /> 
    <custom-filter ref="anonymousAuthFilter" position="ANONYMOUS_FILTER"/> 
    ... 
</http> 

đậu:

<beans:bean id="anonymousAuthFilter" class="own.package.auth.SecurityAnonymousAuthenticationFilter"> 
    <beans:property name="key" value="anonymousKey "/> 
    <beans:property name="userAttribute" value="anonymous,ROLE_ANONYMOUS"/> 
</beans:bean> 

và te Java Class:

public class SecurityAnonymousAuthenticationFilter extends GenericFilterBean implements InitializingBean { 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     logger.info("Entering doFilter method"); 
     //implementation code here 
    } 

    //other methods 
} 

Vấn đề là các phương thức doFilter không được gọi khi yêu cầu máy chủ. Tuy nhiên phương thức init afterPropertiesSet() đang được gọi ... Có ai hiểu tại sao customFilter của tôi không bị sa thải không?

P.S. Tôi đã đặt tên delegatingFilterProxy trong tệp web.xml, vì vậy đó không phải là vấn đề.

+0

Cố gắng chèn bộ lọc tùy chỉnh của bạn vào một số vị trí khác (ví dụ ** sau = "ANONYMOUS_FILTER" **). Có thể ** vô hiệu hóa được bật = "sai" ** hoạt động theo vị trí bộ lọc? –

+0

@MaksymDemidas: Thx cho nhận xét, tiếc là nó không thay đổi bất cứ điều gì. –

+0

Bạn đã thử xóa ** anonymous enabled = "false" ** chưa? –

Trả lời

1

ANONYMOUS_FILTER là bộ lọc liên quan đến không gian tên. Bạn cần phải tránh bất kỳ thẻ namespace mà tham chiếu đến psoition lọc cụ thể:

<http auto-config='false' request-matcher="regex" use-expressions="true"> 
    <custom-filter ref="anonymousAuthFilter" position="ANONYMOUS_FILTER"/> 
    ... 
    </http> 

Để tham khảo thêm thấy các tài liệu an ninh mùa xuân trong phần 2.3.5: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html

Edit: Và chắc chắn rời khỏi thẻ <anonymous-enabled=false/> .

Chỉnh sửa 2: Đã sửa câu trả lời của tôi. Cấu hình này sẽ hoạt động. Nếu không, tốt hơn chúng ta cần phải bắt đầu xem xét một bức tranh lớn hơn và bạn sẽ phải đăng thêm ứng dụng của mình, bắt đầu với cấu hình hoàn chỉnh.

+0

tự động định cấu hình đã ở 'sai' nếu không được xác định. Từ tài liệu: _ ** auto-config: ** Tự động đăng ký biểu mẫu đăng nhập, xác thực BASIC, xác thực ẩn danh, dịch vụ đăng xuất, nhớ-tôi và tích hợp servlet-api. Nếu được đặt thành "true", tất cả các khả năng này sẽ được thêm (mặc dù bạn vẫn có thể tùy chỉnh cấu hình của mỗi bằng cách cung cấp phần tử tương ứng). Nếu không được chỉ định, mặc định là "sai" ._ Như đã nói trước khi thoát ra 'vô danh bật = false' đáng tiếc không hoạt động. –

+0

Đã cập nhật câu trả lời của tôi. – Carsten

+0

Bạn đã đúng. Có một vấn đề khác gọi nó. Tôi cũng có một thẻ http khác với security = none, để hiển thị một số nội dung css + js cho bất kỳ ai. Đáng buồn thay, mẫu bộ lọc này đã sai và toàn bộ ứng dụng của tôi không còn đi qua bộ lọc ẩn danh của tôi nữa. Thx nghĩ với tôi! –

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