JavaWeb 后台免密登陆第三方系统
现象描述
前台需要为用户提供免密登录聊天工具,随用随登录,可随时退出。登录时后台返回密文到前台,前台解析成明文,以请求第三方jsp的方式登录到产品elink的Web端,elink启动Web端聊天程序。
方案有三个:
将请求jsp登录的方式放到后台处理,需要调整这部分逻辑
类似于单点登录
实际开发:
使用URLConnection建立连接。因为是GET请求,所以在后台从session中获取账号信息拼接路径。
URL realUrl = new URL(s);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
获取请求头中的必要信息
//取cookie
String key;
String sessionId="";
String cookieVal = null;
for(int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++){
if(key.equalsIgnoreCase("set-cookie")){
String headerField = connection.getHeaderField(i);
if(headerField.indexOf("JSESSIONID")>-1) {
cookieVal = headerField.split("=")[1];
}else if(headerField.indexOf("SERVERID")>-1){
sessionId = headerField.split("=")[1];
}
}
}
设置响应的cookie,至关重要的一步
Cookie cookie = new Cookie("JSESSIONID",cookieVal);
response.addCookie(cookie);
Cookie sessionIdc = new Cookie("SERVERID",sessionId);
response.addCookie(sessionIdc);
最后记得关闭流
两方联调,统一加密方式使用加密后的信息通信,保证前台用户信息为密文
加密传输
页面需要保存加密后的账号信息。
仅在用户登录系统时登陆一次,限时保持连接。
页面,session中不用保存账号信息。