React 中 fetch 的跨域与cookie共享

最近新开了一个项目,前端使用react,后端使用springmvc。数据的交互使用ES6的新API:fetch。由于存在跨域问题,react下fetch的参数,和后端springmvc都要做相应的配置。

####前端请求:

fetch(requestData(your_url,'POST',{email:email,password:password}))
        .then(response => response.json())
        .then(json => console.log(json)

function getRequestData(url, method, params) {

    if(!method) {
        method = 'GET';
    }

    let requestParam = {
        method: method,
        mode: 'cors',
        credentials: "include",
        headers: new Headers({
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        })
    };

    if (params != null) {
        Object.assign(requestParam, {body: JSON.stringify(params)});
    }
    return new Request(url, requestParam);
}

####JAVA代码

  1. web.xml 配置

     <filter>
         <filter-name>cors</filter-name>
         <filter-class>com.dommain.filter.CORSFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>cors</filter-name>
         <url-pattern>/mobile/*</url-pattern>
     </filter-mapping>
    

2.CORSFilter 代码

package com.domian.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CORSFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;

         //前端react项目的域名
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:3500");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        //设置允许访问cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        chain.doFilter(req, res);
    }


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

}
  1. controller 代码

    @RequestMapping("/dologin")
    @ResponseBody
    public User login(@RequestBody Map<String, String> user) {
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new                         UsernamePasswordToken(user.get("email"), user.get("password"));
        subject.login(token);
        return currentUserService.getCurrentUser();
    }
    

转载于:https://my.oschina.net/imeasyer/blog/677728

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值