2015-05-28 20 views
5

Tuyên bố từ chối trách nhiệm: Câu hỏi của tôi hơi giống với this questionthis question, nhưng tôi đã thử tất cả các câu trả lời được đề xuất trong các chủ đề đó và đã dành vài ngày đấu tranh với vấn đề.Sử dụng chọn lọc bộ lọc CSRF của Spring Security

Tôi đang giới thiệu Spring Security 3.2.6 trong ứng dụng hiện có của mình (JSP, Servlet only) và tôi đang sử dụng cấu hình Java. Ứng dụng của tôi sẽ được cả trình duyệt và khách hàng không sử dụng trình duyệt sử dụng. Tôi muốn tất cả các yêu cầu của trình duyệt tới các URL (tức là /webpages/webVersion//webpages/webVersion2/) để được bật CSRF và tất cả các yêu cầu khác bị vô hiệu hóa CSRF. Khách hàng không có trình duyệt không bao giờ truy cập trên hai URL, trong khi ứng dụng trình duyệt cũng có thể truy cập các URL bị vô hiệu hóa CSRF.

Tôi đã thử một loạt các lựa chọn:

  1. Enable Xuân An chỉ vào URL aformentioned:

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
        http.authorizeRequests() 
         .antMatchers("/","/resources/****").permitAll() 
         .antMatchers("/webpages/webVersion/****", "/webpages/webVersion2/****").authenticated() 
         .antMatchers("/webpages/****").permitAll() 
         .anyRequest().anonymous() 
         .and() 
         .formLogin().loginPage("/webpages/webVersion/login/newLogin.jsp").failureUrl("/webpages/webVersion/login/newLogin.jsp?error=true").loginProcessingUrl("/j_spring_security_check") 
         .usernameParameter("username").passwordParameter("password").defaultSuccessUrl("/webpages/webVersion/login/loginSuccess.jsp", true).permitAll() 
         .and() 
         .logout().logoutUrl("/webpages/webVersion/logout.jsp").permitAll() 
         .and().exceptionHandling().accessDeniedPage("/webpages/webVersion/404-error-page.jsp") 
         .and() 
         .csrf(); 
    } 
    

    này đã không làm việc như tôi nhận xét rằng CSRF được kích hoạt cho tất cả các các URL.

  2. Cố gắng sử dụng CSRFProtectionMatcher:

    .csrf().requireCsrfProtectionMatcher(csrfRequestMatcher); 
    

    CSRF được kích hoạt cho chỉ URL dự định, nhưng ngay cả /resources/**/webpages/** URL cần phải được kiểm tra bên trong phù hợp với chức năng. Có vẻ là một chút nhiều xem xét nó sẽ được cho tất cả các yêu cầu.

  3. Cố gắng sử dụng một phiên bản khác của phương pháp configure:

    @Override 
    public void configure(WebSecurity web) throws Exception { 
        web.ignoring().regexMatchers(".*?/jsp/(?!webVersion|webVersion2).*?"); 
    } 
    

    Tôi không chắc liệu tôi đã làm nó một cách chính xác nhưng điều này đã không tạo ra các kết quả tôi muốn.


nào trong cách tiếp cận trên là đúng (Xuân An) cách làm những gì tôi muốn? Làm thế nào tôi có thể đạt được hành vi mong muốn từ cấu hình Spring Security của tôi?

Trả lời

1

Hóa ra đó là của họ một số lỗi với cấu hình của tôi và cuối cùng tôi đã đạt được mục tiêu sử dụng cách tiếp cận 3 .. Tôi sử dụng dưới đây phiên bản của chức năng cấu hình cùng với thông thường configure(HttpSecurity http) chức năng ..

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().regexMatchers(".*?/jsp/(?!webVersion|webVersion2).*?"); 
} 
Các vấn đề liên quan