从现在开始打算记录一下学到的知识点,希望能坚持下去,保留一下自己生活的轨迹。技术还算个小白阶段。
俩个系统之间实现跳转,必须要确定账号之间对应的联系。
跳转方式
1.采用直接拼接到url进行实现-这种方式是拼接相关字段到另一个系统。直接触发另一个系统的登录。但是不好的就是安全性不强。不管账号密码是否加密,直接在url中显示别人拿到了以后肯定是能直接通过链接登录到这个账号的。
2.后台获取token认证。采用对方系统的接口进行获取账号对应的token进行跳转。但是token的获取在前端一般存在跨域问题。(后面会说解决方法)在后端调用接口直接就可以获取。对方系统必须有对url拼接token验证的方法。我自己写的只有前端拦截器进行储存校验,还不知道其他系统是怎么实现的,应该也是进行的拦截判断。
3.自定义拼接判断的字段。首先登录其他系统查看应用中的存储。确认用来识别用户登录和登录信息的字段后(可以删除刷新页面进行判断,登录掉了就是这个字段了),然后查看登录接口的返回值。一般是返回token或者返回token后调取加密接口进行储存。字段对应上直接在url上拼接来就行了。不过要在另一个系统进行url拦截判断。判断后,设置到相应的储存字段上就行了。然后设置一下这个字段的监督事件。
访问接口问题
1.前面说的前端访问就主要是一个跨域问题----cros报错。处理方式一般都是使用nglinx代理。就是通过nglinx监督一个链接后,转发到另一个链接。从而实现用nglinx访问接口。
2.就是采用后端进行访问了。
设置请求头方法
// 入参定义
Map<String, Object> map = new HashMap<String, Object>();
// 假如cookie需要传token值
String token = "token值";
HttpRequest post = HttpUtil
.createPost(WebserviceUtil.oaWebService + oa.getAddress());
HttpCookie cookie = new HttpCookie("ecology_JSessionid", oa.getOaCookie());
post.cookie(cookie);
RequestContextHolder.getRequestAttributes())
HttpResponse execute = post.execute();
设置请求体方法和设置请求格式
URL url = new URL("http://localhost/dev-api/login");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestMethod("POST");
connection.setDoOutput(true);
String requestBody = "{\"code\":\"0\", \"password\":\"admin123\",\"username\":\"admin\", \"uuid\":\"a522d20428a64a01a234c8eae1a4dc10\"}";
OutputStream outputStream = connection.getOutputStream();
outputStream.write(requestBody.getBytes());
outputStream.flush();
outputStream.close();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println("Response: " + response.toString());
JSONObject jsonObject = JSON.parseObject(response.toString());
String result= (String) jsonObject.get("token");
return result;
} else {
System.out.println("Request failed with response code: " + responseCode);
}
connection.disconnect();
return null;
}
获取其他接口Cookie可以使用访问url在进行获取的方式,这是是通过url(不是接口)地址进行获取的,并且url地址要携带验证信息保证能ping通。
HttpUtil.createGet(url).execute().getCookie("ecology_JSessionid").getValue();
前端拦截url
ainAppRouter.beforeEach((to, from, next) => { // to中是当前的地址
console.log(to.query.MICRO_orgMain_user_token)
if (to.query.MICRO_orgMain_user_token) {
utils.setStorage("user_token", to.query.MICRO_orgMain_user_token);
};
}
这样就能直接携带token进行访问,由访问系统拦截,添加到自己的浏览器存储中进行验证。
本次还使用了若依的一些模块进行辅助,比如从库的使用,若依工具类获取当前账户的方法(通过认证信息中获取用户信息)。
总结: 通过对接工作,要积极与对接平台负责人进行联系。确定账户绑定方式,访问对接平台接口的认证方式与携带认证访问的相关接口。