后台页面登录验证码失效问题


环境:

后端通过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