单点登录实现
前端代码:
1 function openIsc(){ 2 $.get("${ctx}/singleSignOn/getUrltoisc", function(msg) { 3 try { 4 if(!msg){ 5 Dialog.error("无法跳转"); 6 } 7 else{ 8 var url = msg; 9 window.open(url,'_blank','noopener noreferrer'); 10 } 11 } catch (e) { 12 console.log(e); 13 Dialog.error("无法跳转"); 14 } 15 });
通过ajax访问后台,后台取出链接通过Window.open打开。
后台代码:
1 public class SingleSignOnService { 2 private final String host = "172.18.247.XXX"; // artemis网关服务器ip端口; 3 private final String appKey = "*******"; // 秘钥appkey 4 private final String appSecret = "XXXXXXXXXX";// 秘钥appSecret 5 private final String sevice = "ip";//海康威视安防监控平台网址 6 private final String urlHead = "ip/bic/ssoService/v1/tokenLogin?"; // 拼接URL字符串开头; 7 private String getIscToken(String useAccount) throws ServiceException { 8 /** 9 * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数. 10 */ 11 ArtemisConfig.host = host; // artemis网关服务器ip端口 12 ArtemisConfig.appKey = appKey; // 秘钥appkey 13 ArtemisConfig.appSecret = appSecret;// 秘钥appSecret 14 /** 15 * STEP2:设置OpenAPI接口的上下文 16 */ 17 final String ARTEMIS_PATH = "/artemis"; 18 /** 19 * STEP3:设置接口的URI地址 20 */ 21 String getTokenUrl = ARTEMIS_PATH+"/api/cas/v1/tgt/login"; 22 Map<String, String> path = new HashMap<String, String>(2) { 23 { 24 put("https://", getTokenUrl); //根据现场环境部署确认是http还是https 25 } 26 }; 27 28 /** 29 * STEP4:设置参数提交方式 30 */ 31 String contentType = "application/json"; 32 33 /** 34 * STEP5:组装请求参数 35 */ 36 Map<String, String> body = new HashMap<String, String>(); 37 body.put("userCode", useAccount); 38 body.put("service",sevice ); 39 body.put("language", "zh_CN"); 40 /** 41 * STEP6:调用接口 42 */ 43 String result = ArtemisHttpUtil.doGetArtemis(path, body, null, contentType, null);// get请求application/json类型参数 44 JSONObject resData = JSONObject.parseObject(result); 45 ServiceAssert.hasText(resData.toString(), "调用接口失败"); 46 ServiceAssert.isTrue(resData.containsKey("code"), "获取token失败"); 47 String dataString = resData.getString("data"); 48 JSONObject tokenData = JSONObject.parseObject(dataString); 49 String token = tokenData.getString("token"); 50 return token; 51 } 52 /** 53 * 获取isc单点登录url55 * @date 2019年12月11日 下午5:34:20 56 * @param userAccount 工号 57 * @return 58 * @throws ServiceException 59 */ 60 public String getIscIndexURL(String useAccount) throws ServiceException { 61 return urlHead+"token="+getIscToken(useAccount)+"&service="+sevice; 62 } 63 }