2017-03-22 78 views
1

我有一個基於Struts2的應用程序,它從另一個應用程序(跨域)接收請求。爲此,我增加了我的web.xml中的CORS過濾器只是Struts2的過濾器之前:CORS過濾器無法維護會話

<filter> 
     <filter-name>CorsFilter</filter-name> 
     <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
     <init-param> 
      <param-name>cors.allowed.origins</param-name> 
      <param-value>*</param-value> 
     </init-param> 
     <init-param> 
      <param-name>cors.allowed.methods</param-name> 
      <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
     </init-param> 
     <init-param> 
      <param-name>cors.allowed.headers</param-name> 
      <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-Test-Header 
      </param-value> 
     </init-param> 
     <init-param> 
      <param-name>cors.exposed.headers</param-name> 
      <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials 
      </param-value> 
     </init-param> 
     <init-param> 
      <param-name>cors.support.credentials</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <init-param> 
      <param-name>cors.preflight.maxage</param-name> 
      <param-value>1000</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CorsFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class> 
      org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
     </filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

到應用程序的第一個請求其創建新的會話工作正常。但隨後在隨後的請求中,當我嘗試訪問我的動作類中的同一個會話時,我得到空值。下面是我在做什麼來得到它:

HttpSession session = ServletActionContext.getRequest().getSession(false); 

以上優良工程通常但這裏的會話是越來越無效某種程度上也許。 我在啓用了Allow-Control-Allow-Origin:*擴展的Chrome瀏覽器中進行測試。這裏是我的POST請求頭的外觀在控制檯:

Accept:*/* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:9 
Content-Type:application/x-www-form-urlencoded; charset=UTF-8 
Host:localhost:7070 
Origin:http://evil.com/ 
Referer:http://testdevsvr:8989/SmartAdministration/home 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 

我想知道,如果我缺少的配置或別的東西,是從進一步繼續阻止我錯了東西。

+0

你缺少struts過濾器配置。 –

+0

@Roman C:爲了簡潔,我沒有在這裏添加。我沒有包含struts2過濾器。更新我的問題。 –

回答

1

我終於做基於給定here建議這兩個步驟,以維護會話:

1)包括我的所有Ajax調用下面的代碼片段:

xhrFields: {withCredentials: true} 

2)包括這個配置在我的web.xml中:

 <session-config> 
     <session-timeout>30</session-timeout> 
      <cookie-config> 
       <http-only>false</http-only> 
      </cookie-config> 
    </session-config>