系统前后台分离
登录后保存token
Demo登录地址:
http://192.168.5.108:8088/oa/loginiframe.aspx
登录后cookie中存入访问token和有效期expire-
客户端可取token进行资源访问
Demo访问地址
http://192.168.5.108:8088/demo.html
可以看到这个页面是静态的html文件,它通过cookie中的token对原系统进行资源访问
实现代码:var getToken = function(){ //从cookie中获取token var tokenCookie = getCookie('token'); if(tokenCookie!=''){ var usertoken = tokenCookie.split('&')[0].split('=')[1]; var expire = tokenCookie.split('&')[1].split('=')[1]; var timestamp = Date.parse(new Date())/ 1000; if(expire>timestamp){ //有效期内 return usertoken; } } return ''; } $(function(){ if(getToken() == ''){ alert('尚未登录'); window.location.href='http://192.168.5.108:8088/oa/loginiframe.aspx'; return false; } var postData = '{ "sql":"bookPagesByUnit @id=1","udx":"-1","flt":"","sortby":"","server":"","DB":"","token":"'+getToken()+'"}'; $.ajax({ type: 'POST', url: "/oa/api/doclistm.asmx/djson", data: postData, success: function (data) { if(typeof (data.d)!='undefined'){ var json = JSON.parse(data.d);//d的值为json的转义文本,需转化成json使用 var str = '<tr><td>'+json.data.lid+'</td><td>'+json.data.mc+'</td><td><button class="btn btn-danger btn-xs">删除</button></td></tr>'; $('#showlist').append(str); } }, dataType: "json", beforeSend: function (x) { x.setRequestHeader("Content-Type", "application/json"); }, }); });
已实现的ajax接口地址:http://192.168.5.108:8088//oa/api/doclistm.asmx
系统间的token传递
服务器配置CORS协议支持跨域访问,这里可以直接使用ajax调用8080的接口
-
页面间跳转:先访问java系统的接口地址传递cookie
实现代码:var modelHost = 'http://192.168.5.108:8080/api/route'; $('#in-btn').on('click',function(){ $('#ifm').attr("src",modelHost+'?token='+usertoken+'&expire='+expire+'&model='+$(this).data('model')); }); $('#go-btn').on('click',function(){ window.location = modelHost+'?token='+usertoken+'&expire='+expire+'&model='+$(this).data('model'); });
该接口把token和expire存入localStorage(解决ajax跨域问题)
-
页面中获取token访问java业务接口
var getToken = function(){ var token = window.localStorage.getItem('everestec-usertoken'); var expire = window.localStorage.getItem('everestec-expire'); if(token==null||token==''||expire==null||expire==''){ return ''; } var timestamp = Date.parse(new Date())/ 1000; if(expire<timestamp){ return ''; } else return token; } $(function(){ var usertoken = getToken(); //从localStorage从获取token if(usertoken==''){ alert('尚未登录'); window.location.href='http://192.168.5.108:8088/oa/loginiframe.aspx'; return; } $.post('/api/wage/ctype?usertoken='+usertoken,function(data){ if(data.ret != 0){ //服务器对token的判断 alert('尚未登录'); window.location.href='http://192.168.5.108:8088/oa/loginiframe.aspx'; return false; } $("#showlist").empty(); $.each(data.data, function (i, row) { var str = '<tr id="tr_'+row.id+'"><td>'+row.mname+'</td><td> '+row.sname+'</td><td>' +'<button class="btn btn-danger btn-xs">删除</button>' +'</td></tr>'; $("#showlist").append(str); }); }); });
ios和安卓或者其他系统只需要直接使用token 访问业务接口(不涉及跨域)