鲁磊 发表于 2024-5-11 16:37:33

[9.06]单点登录问题

本帖最后由 鲁磊 于 2024-5-11 16:46 编辑

这是按照官方给的单点登录的案例,c#开发的单点登录,就是一个按钮,点击后单点登录活字格页面,现在的问题时如果:configBaseUrl的值也就是活字格页面的url如果是http://192.168.31.250/运行管理平台   就可以正常单点登录活字格页面,如果是:http://192.168.31.250/运行管理平台/灭菌监测分析,就会提示(代码如下),灭菌监测分析这个页面权限设置的任何人,网页里正常是可以直接打开这个这个界面的:



public class SAPPreOrderWebService
      {
            public void OpenPage()
            {
                string configBaseUrl = ConfigurationManager.AppSettings["BaseUrl"];// 从config中BaseUrl进行配置

                if (string.IsNullOrEmpty(configBaseUrl))
                {
                  configBaseUrl = Global.GlobalVariables.DatabaseInterface.HNXYSAPPreOrderWebServiceADD;// 在数据接口-SAP物资订接口地址中设置
                }

                // configBaseUrl 现在包含了从配置文件或默认值中获取的地址



                var userName = LoginUser.CurrentLoginUser.UserInfo.LoginName;
                var password = Global.GlobalVariables.DatabaseInterface.HNXYSAPPreOrderWebServicePassword; // 改为从 Global.GlobalVariables.DatabaseInterface.password 中获取密码,在数据接口-SAP物资订接口密码中设置

                HttpWebRequest rq = HttpWebRequest.Create(configBaseUrl + "/SSO/GetUserToken") as HttpWebRequest; // 拼接SSO/GetUserToken URL 的请求
                rq.Method = WebRequestMethods.Http.Post; // 请求方法为 POST
                rq.Accept = "application/json"; // 请求内容
                rq.ContentType = "application/json"; // 请求内容
                var loginStr = "{userName:\"" + userName + "\", password:\"" + password + "\"}";
                var data = Encoding.UTF8.GetBytes(loginStr); // 转为UFT-8格式
                using (Stream stream = rq.GetRequestStream())
                { // 使用流发送请求
                  stream.Write(data, 0, data.Length);
                }
                var response = rq.GetResponse(); // 获取请求响应
                var token = new StreamReader(response.GetResponseStream()).ReadToEnd(); // 获取响应的 token
                if (token.StartsWith("Error:"))
                { // 如果token的开头以“Error”开头,说明响应有问题报错。
                  MessageBox.Show(token);
                  return;
                }
                Process.Start(configBaseUrl + "?token=" + token); // 如果没有报错,就单点登录进入活字格页面
            }
      }
是不是请求方式的问题,是不是应该改成get?

陈城 发表于 2024-5-11 16:37:34

configBaseUrl设置为http://192.168.31.250/运行管理平台
Process.Start(configBaseUrl +"/灭菌监测分析"+ "?token=" + token);

豪~豪 发表于 2024-5-11 16:52:07

http://192.168.31.250/运行管理平台 --这个是应用路径,所以可以
http://192.168.31.250/运行管理平台/灭菌监测分析 --这个是加了页面名称,接口错了,然后不可以
所以得出结论不能加页面名称,不知道我说的对不对

鲁磊 发表于 2024-5-11 17:03:41

豪~豪 发表于 2024-5-11 16:52
http://192.168.31.250/运行管理平台 --这个是应用路径,所以可以
http://192.168.31.250/运行管理平台/灭 ...

是的,不能直接打开页面吗?

豪~豪 发表于 2024-5-11 17:05:01

鲁磊 发表于 2024-5-11 17:03
是的,不能直接打开页面吗?
不能的,路径不对接口对不上,你可以单点登陆后在进行跳转

鲁磊 发表于 2024-5-11 17:08:50

豪~豪 发表于 2024-5-11 17:05
不能的,路径不对接口对不上,你可以单点登陆后在进行跳转

应该怎么做可以自动跳转啊?这个页面还不能设置成默认界面

豪~豪 发表于 2024-5-11 17:12:29

Process.Start(configBaseUrl + "?token=" + token +"&name=灭菌监测分析");
//这样看看,然后活字格看看能不能接收到

豪~豪 发表于 2024-5-11 17:19:10

豪~豪 发表于 2024-5-11 17:12


测试了一下是可以的,然后在首页使用=GETURLQUERYVALUE("name")命令可以读取到参数,然后在跳转对应页面就行

鲁磊 发表于 2024-5-11 17:27:53

豪~豪 发表于 2024-5-11 17:12


不行,可能不是这个问题,因为我看了代码,是走到   var token = new StreamReader(response.GetResponseStream()).ReadToEnd(); // 获取响应的 token   这一步出的问题,还没有到打开网址那一步

豪~豪 发表于 2024-5-11 17:30:19

鲁磊 发表于 2024-5-11 17:27
不行,可能不是这个问题,因为我看了代码,是走到   var token = new StreamReader(response.GetRespon ...

那就是你token都还没有获取到

先请求可以百度C#怎么请求POST
页: [1] 2
查看完整版本: [9.06]单点登录问题