我有彈簧mvc(其他),彈簧安全(4.x)和angular2應用程序。應用程序部署在weblogic中,它負責SAML身份驗證,因此我的應用程序僅使用授權部分。要做到這一點,我們使用自定義請求標頭認證過濾器,我們驗證自定義請求標頭,並基於它從具有授予權限的數據庫加載用戶。所有這些工作正常。彈簧安全與angular2給403禁止錯誤只在POST,PUT和刪除
現在我正在實施CSRF保護,其中我的服務器正在添加CSRF令牌cookie,並且由於angular2具有開箱即用的支持,因此它將在所有後續請求上傳遞與x-xsrf令牌相同的cookie。
問題從這裏開始,所有GET請求都正常工作,但是當我的應用程序執行POST或PUT或DELETE時,出現403錯誤。比較GET和POST請求,我注意到POST請求沒有「Access-Control-Allow-Headers」,所以我想我的服務器不得不公開這個頭文件,以便瀏覽器可以發送X-XSRF-TOKEN到POST/PUT請求。
GET請求中存在相同的標題。
任何人都可以解釋我在正確的軌道上嗎?如果是的話,那麼我怎樣才能公開這個標題在春季安全或彈簧mvc整個應用程序?
如果不是那麼是什麼原因導致這個問題?
我CORS配置
<filter>
<filter-name>cors</filter-name>
<filter-class>com.elm.mb.rest.filters.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
LOG.trace("Sending Header....");
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Content-Type,X-XSRF-TOKEN");
response.addHeader("Access-Control-Max-Age", "1");
}
filterChain.doFilter(request, response);
}
請看我原來的帖子,我已經添加了cors config。而且這個過濾器是我的spring安全配置中的第一個,因此它可以在spring安全過濾器之前攔截所有的請求。 – user509755