后台頁面登錄驗證碼失效問題


環境:

后端通過Servlet生成驗證碼圖片返回給前端,同時將驗證碼的字符串格式保存到Session中,sessionId作為key。
前端第一遍通過servlet請求得到驗證碼的圖片格式,第二遍通過Servlet請求得到session中的字符串形式,同時驗證該二維碼是否過期(有效)。
前端Vue框架,通過代理進行servlet的請求。

問題

與前端進行聯調時,前端兩次請求的sessionid不同,導致第二次的Servlet請求為空,並且登錄接口中驗證碼也無法校驗成功。

處理過程

在web.xml中加入Tomcat的跨域過濾器

	<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</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>10</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CorsFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

加入允許跨域的設置后,該問題依舊沒有解決。

在谷歌瀏覽器中查看兩次請求中攜帶的cookie,結果如下

瀏覽器提示該cookie被攔截了
原因如下:此 Cookie 被阻止, 因為它的路徑不是請求 URL 路徑的完全匹配或超級目錄。

於是,獲取該問題的出現於 Cookie的path相關,於是更改了項目的路徑。
將項目的路徑從 /sdrs_xjyy/ 變為 /
該問題解決。

該問題的具體原理還待探討.....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM