单点登录实现

前端代码:

 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 }
posted @ 2020-01-16 11:25  leviH  阅读(894)  评论(1编辑  收藏  举报