一、背景
目前接手一个Javaweb项目,属于半成品的那种,前端代码和Java代码在一个项目中,这种情况也就不存在什么跨域问题,可是我不擅长写前端,于是公司找了个前端加入项目团队,我就将前端的代码给到他,我写后端接口服务。再做用户登录时出现问题了,之前用户登录的随机码存储在session中,用户登录时从session中取出来然后校验是否正确,现在也这样做,但发现从session中取不出存储的校验码,通过日志发现每次获取到的session都是新的session,也就是每次sessionId都不同,这也就导致了每次存值和取值的session是两个,那肯定取不出随机码了。
二、思路
使用session存随机码时必须保证取时的session和存的session是一个,前后端分离时就会出现跨域问题,ajax跨域请求接口时每一次都会产生新的session,如果这种情况再使用session,那肯定取不出值。我从网上找了很多方案,但可行性和可用性都没有合适的或者说都没有能用户。现在我给出一个方案,可行且保证登录安全性。方案:前端每次请求验证码的时候,传一个随机数,服务端用这个随机数和验证码进行key和value的形式存储,建议用map集合,用户点登录的时候把用户输入的验证码和之前的随机数都传给服务端,服务端用key取出value进行校验。
这里就提供思路,代码根据自己项目进行修改。