1. 程式人生 > >spring security中CSRF中設定不針對某些請求過濾

spring security中CSRF中設定不針對某些請求過濾

在spring security 4中,CSRF預設開啟: 


Java程式碼  收藏程式碼
  1. <http>  
  2.     ...  
  3.     <csrf />  
  4. </http>  


但如果某些URL不想加入CSRF,可以使用下面的辦法下載: 

實現RequestMatcher.這個介面中的方法,在這裡排除某些URL不做CSRF,比如: 

Java程式碼  收藏程式碼
  1. public class CsrfSecurityRequestMatcher implements RequestMatcher {  
  2.     private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$"
    );  
  3.     private RegexRequestMatcher unprotectedMatcher = new RegexRequestMatcher("/unprotected"null);  
  4.     @Override  
  5.     public boolean matches(HttpServletRequest request) {  
  6.         if(allowedMethods.matcher(request.getMethod()).matches()){  
  7.             return false;  
  8.         }  
  9.         return
     !unprotectedMatcher.matches(request);  
  10.     }  
  11. }  


這裡,就是針對/unproted開頭的URL,都不用做CSRF了 
然後在配置檔案中下載: 

Java程式碼  收藏程式碼
  1. <http>  
  2.     <csrf request-matcher-ref="csrfSecurityRequestMatcher"/>  
  3. </http>