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 question và this 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/
và /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:
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.
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/**
và/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.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?