springboot中ajax跨域和session共存问题

前言:目前大多数的项目都是采用前后端分离的方式架构,后端常用springboot框架比较多。

问题:前端注册ajax发送请求验证码接口,后台接口中发送验证码并保存数据到缓存session中;然后又调用ajax发送请求-注册接口,在注册接口比较前台传过来的值和session中存的值;而从session中取不到值,为null?

原因:前后端交互的一个跨域的问题。这个注解(@CrossOrigin)类默认并没有开启对session跨域的一个共享,所以需要自己去开启对跨域参数的一个session授信,在@CrossOrigin的参数里,手动添加2个参数,允许跨域传输所有的header参数,并支持session共享。

解决

1、首先接口类上加注解

@CrossOrigin(allowCredentials="true",allowedHeaders="*")
@RestController
@RequestMapping("/interface/user")
public class IUserInfoController {

2、接口方法请求注解添加(consumes ="application/x-www-form-urlencoded"

     /**
     *  发送手机验证码
     * @param phone  手机
     * @return
     */
    @GetMapping(value="/sendCode",consumes ="application/x-www-form-urlencoded")
    public Map<String,Object> sendMobileCode(@RequestParam("phone")String phone,HttpSession session){

     /**
     *  注册用户
     * @param phone  手机
     * @param code  手机验证码
     * @param request
     * @return
     */
    @PostMapping(value="/addUser",consumes ="application/x-www-form-urlencoded")
    public Map<String,Object> addUser(@RequestParam("phone")String phone, @RequestParam("code")String code, HttpServletRequest request){

         HttpSession session = request.getSession();

3、前端JS(注意需要添加contentType:"application/x-www-form-urlencoded"和xhrFields:{withCredentials:true}

//发送验证码
$.ajax({
        type:"get",
        url:""+config.url+"/interface/user/sendCode", //获取验证码
        xhrFields:{withCredentials:true},//前端适配:允许session跨域
        data: data,
        contentType:"application/x-www-form-urlencoded",//表单数据发送编码类型
        success: function(e){ 
        	if (true) {

        	}else{
        		mui.toast(e.data.msg)
        	}
        },
        error: function(){
        	mui.toast('请检查网络状态!')
        }
    })
//注册
$.ajax({
        type:"post",
        url:""+config.url+"/interface/user/addUser", //注册
        data: data,
        contentType:"application/x-www-form-urlencoded",//表单数据发送编码类型
        xhrFields:{withCredentials:true},//前端适配:允许session跨域
        success: function(data){ 
        	if (data.code == 1) {
        		config.storage().setItem('userid',data.id);
        		window.location.href= 'index.html';
        	}else{
        		mui.toast(data.msg)
        	}
        },
        error: function(){
        	mui.toast('请检查网络状态!')
        }
    })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值