在H5 App中实现自定义Token的注意事项

咱们在写Hybird App时,通常都是利用Token来代替Cookie实现用户会话。前端

若是是发布成app的话,因为app自带了webview环境,运行时与后端服务器的关系至关于Server 2 Server,所以通常不涉及跨域的问题。web

但若是发布成H5 App的话,由于是直接在终端的浏览器里运行,就会涉及到CORS(跨域资源共享)的处理问题。后端

关于CORS的解决办法,主要就是三个方面:跨域

一、简单请求:不涉及Header的附加信息,直接添加如下头部响应便可:浏览器

response.setHeader("Access-Control-Allow-Origin", "*");            //容许的请求域名
response.setHeader("Access-Control-Allow-Methods", "POST, GET");    //容许的请求方式
response.setHeader("Access-Control-Allow-Headers", "*");        //容许的自定义头
response.setHeader("Access-Control-Max-Age", "3600");            //信任时间

 

二、复杂请求:若是请求或者响应的Header中包含须要处理的额外信息时,则每次实际请求以前都会发送一次OPTIONS类型的预请求,若是预请求获得正确的回应,才会发送正式请求,所以,须要服务端除了要添加上面的响应之外,还要对预请求进行处理:服务器

String method = getRequest().getMethod().toUpperCase();
if(method == "OPTIONS"){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
}

 

三、发送Token:也是最重要的一点,若是须要经过Header向前端返回Token,那么在发送响应以前,还须要额外添加一行许可:app

response.setHeader("Access-Control-Expose-Headers", "MyAppTokenName");
response.setHeader("MyAppTokenName", TokenUtil.getToken());

 

其中红色的那行代码很是重要,不然前端将没法接收到response回来的Token串。spa

相关文章
相关标签/搜索