请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

大秦
金牌服务用户   /  发表于:2021-6-21 17:27  /   查看:3208  /  回复:12
1金币
各位大神,拜托分享一份java版的单点登录获取token的代码,自己写的一直无法获取到token,非常感谢

最佳答案

查看完整内容

你好,我们这边暂时没有JAVA的环境,这样吧,发你一份单点登录代码的注释,你可以参考代码逻辑参考一下。

12 个回复

倒序浏览
最佳答案
最佳答案
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2021-6-21 17:27:35
来自 2#
你好,我们这边暂时没有JAVA的环境,这样吧,发你一份单点登录代码的注释,你可以参考代码逻辑参考一下。
  1. var baseUrl = "http://localhost:25979/Forguncy";       // 活字格应用的地址
  2. var userName = "administrator";                         // 第三方网站发给活字格的用户名
  3. var password = "7FBqkHeV!4Rw";  // 这个密码是单点登录密码  // 在活字格中设置的单点登录密码
  4. HttpWebRequest rq = HttpWebRequest.Create(baseUrl + "/SSO/GetUserToken") as HttpWebRequest;      // 拼接SSO/GetUserToken URL 的请求
  5. rq.Method = WebRequestMethods.Http.Post;            //  请求方法为 POST
  6. rq.Accept = "application/json";                  // 请求内容
  7. rq.ContentType = "application/json";               // 请求内容
  8. var loginStr = "{userName:"" + userName + "", password:"" + password + ""}";    //  拼接一个含有第三方系统用户名和单点登录密码的JSON串
  9. var data = Encoding.UTF8.GetBytes(loginStr);                        // 转为UFT-8格式
  10. using (Stream stream = rq.GetRequestStream())                      // 使用流发送请求
  11. {
  12.     stream.Write(data, 0, data.Length);
  13. }
  14. var response = rq.GetResponse();                                    // 获取请求响应  
  15. var token = new StreamReader(response.GetResponseStream()).ReadToEnd();       // 获取响应的 token
  16. if(token.StartsWith("Error:"))                                        // 如果token的开头以“Error”开头,说明响应有问题报错。
  17. {
  18.     MessageBox.Show(token);
  19.     return;
  20. }
  21. Process.Start(baseUrl + "?token=" + token);                            // 如果没有报错,就单点登录进入活字格页面
复制代码


回复 使用道具 举报
大秦
金牌服务用户   /  发表于:2021-6-23 16:19:44
3#
多谢版主,已自己写出了
回复 使用道具 举报
Tracy.Liu讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-6-23 16:32:12
4#
赞一个~
回复 使用道具 举报
ecctv
注册会员   /  发表于:2021-9-14 13:18:41
5#
楼主,可否分享一下,您写的JAVA获取TOKEN的代码?万分感谢!
回复 使用道具 举报
大秦
金牌服务用户   /  发表于:2021-9-14 14:55:43
6#
本帖最后由 大秦 于 2021-9-16 09:04 编辑
ecctv 发表于 2021-9-14 13:18
楼主,可否分享一下,您写的JAVA获取TOKEN的代码?万分感谢!

我的活字格应用发布的是HTTPS,代码如下

package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestToken {
        private static Logger LOGGER = LoggerFactory.getLogger(TestToken.class);
        
        public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException {
                HttpsURLConnection.setDefaultHostnameVerifier(new TestToken().new NullHostNameVerifier());
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, trustAllCerts, new SecureRandom());
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
                HttpURLConnection httpURLConnection = null;
                String userName = "administrator";
                String password = "xxx";  // 这个密码是单点登录密码
                try {
                        // 1. 获取访问地址URL
                        URL url = new URL("https://xxxx/SSO/GetUserToken");
                        // 2. 创建HttpURLConnection对象
                        httpURLConnection = (HttpURLConnection) url.openConnection();
                        /* 3. 设置请求参数等 */
                        // 请求方式 默认 GET
                        httpURLConnection.setRequestMethod("POST");
                        // 超时时间
                        httpURLConnection.setConnectTimeout(3000);
                        // 设置是否输出
                        httpURLConnection.setDoOutput(true);
                        // 设置是否读入
                        httpURLConnection.setDoInput(true);
                        // 设置是否使用缓存
                        httpURLConnection.setUseCaches(false);
                        // 设置此 HttpURLConnection 实例是否应该自动执行 HTTP 重定向
                        httpURLConnection.setInstanceFollowRedirects(true);
                        // 设置请求头
                        //                        httpURLConnection.addRequestProperty("sysId", "sysId");
                        // 设置使用标准编码格式编码参数的名-值对
                        httpURLConnection.setRequestProperty("Content-Type", "application/json");
                        // 连接
                        httpURLConnection.connect();
                        /* 4. 处理输入输出 */
                        // 写入参数到请求中
                        String params = "{userName:\"" + userName + "\", password:\"" + password + "\"}";
                        OutputStream out = httpURLConnection.getOutputStream();
                        out.write(params.getBytes());
                        // 简化
                        //httpURLConnection.getOutputStream().write(params.getBytes());
                        out.flush();
                        out.close();
                        // 从连接中读取响应信息
                        String msg = "";
                        int code = httpURLConnection.getResponseCode();
                        if (code == 200) {
                                BufferedReader reader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
                                String line;
                                while ((line = reader.readLine()) != null) {
                                        msg += line + "\n";
                                }
                                reader.close();
                        }
                        // 处理结果
                        LOGGER.info(msg);
                } catch (IOException e) {
                        LOGGER.error("转发出错,错误信息:" + e.getLocalizedMessage() + ";" + e.getClass());
                } finally {
                        // 5. 断开连接
                        if (null != httpURLConnection) {
                                try {
                                        httpURLConnection.disconnect();
                                } catch (Exception e) {
                                        LOGGER.info("httpURLConnection 流关闭异常:" + e.getLocalizedMessage());
                                }
                        }
                }
        }
        static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                        return null;
                }
                }
        };

        public class NullHostNameVerifier implements HostnameVerifier {
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                        return true;
                }
        }
}

评分

参与人数 2金币 +10 收起 理由
David.Zhong + 5 很给力!
Joe.xu + 5 很给力!

查看全部评分

回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-14 15:43:41
7#
大秦 发表于 2021-9-14 14:55
我的活字格应用发布的是HTTPS,代码如下

package com.origimed.exchange;

感谢大佬的分享

评分

参与人数 1满意度 +5 收起 理由
大秦 + 5

查看全部评分

回复 使用道具 举报
ecctv
注册会员   /  发表于:2021-9-15 22:17:26
8#
大秦 发表于 2021-9-14 14:55
我的活字格应用发布的是HTTPS,代码如下

package com.origimed.exchange;

太感谢大神了!!!
回复 使用道具 举报
David.Zhong讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-16 09:50:36
9#
秦总威武~

评分

参与人数 1满意度 +5 收起 理由
大秦 + 5

查看全部评分

回复 使用道具 举报
大秦
金牌服务用户   /  发表于:2021-9-16 10:58:19
10#
钟工过奖
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部