前端跨域访问sessionID不一致导致的session为null问题

2 篇文章 0 订阅
1 篇文章 0 订阅

问题
登录页面实现验证码功能,后台在生成验证码的同时,将验证码存到session中。前端通过post请求登录,后台可以接收到前端传来的用户名、密码、验证码的数据,但是在后端验证码匹配的时候,获取的session为null。
问题详情:
1、CaptchaController中,在生成验证码的同时,将验证码存到session中。
在这里插入图片描述
2、前端发起登录请求
在这里插入图片描述
3、后端对前端传来的验证码进行校验。
在这里插入图片描述
4、报错:

servlet.service() for servlet [dispatcherservlet] in context with path [] threw exception [request processing failed; nested exception is java.lang.nullpointerexception] with root cause 
java.lang.nullpointerexception: null
5、经调试发现,是因为Service层获取session中的captcha失败,此时获取的session为null。

解决方法:
一、前端部分

  1. 在vue引入axios的位置添加以下代码
import axios from 'axios'
axios.defaults.withCredentials = true;// 允许跨域携带cookie

二、后台部分

  1. 新建一个FilterConfig类, 编写一个拦截器类
/**
 * 允许跨域请求
 * @author Administrator
 *
 */
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.*;
@Component
public class FilterConfig implements HandlerInterceptor{
    
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
    }
 
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2)
            throws Exception {
    }
 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
 
        response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");//是否支持cookie跨域
        response.setHeader("Access-Control-Allow-Headers", "Authorization,Origin, X-Requested-With, Content-Type, Accept,Access-Token");//Origin, X-Requested-With, Content-Type, Accept,Access-Token
        return true;
    }
}
  1. 在创建一个SpringMVCConfig类, 请用拦截器
/**
 * 启用跨域配置
 * 编写SpringMVCConfig类使用FilterConfig中的配置
 * @author Administrator
 *
 */
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@SuppressWarnings("deprecation")
@SpringBootConfiguration
public class SpringMVCConfig extends WebMvcConfigurerAdapter{
    @Autowired
    private FilterConfig filterConfig;
    
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(filterConfig).addPathPatterns("/**");
    }
}

3、重新启动项目,测试问题解决。

解决方法的原址:解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值