泛微OA-E9与第三方系统集成开发企业级实战记录(十四)
本篇介绍的主题是第三方系统单点登录跳转到泛微E9OA系统。大体思路是1第三方系统通过调用泛微OA的获取Token接口获取token2将token拼接到要访问的OA链接页面进行单点登录的访问。注意事项需要注意路径的拼接方式泛微E9采用前后端分离的单页面形式所以正确的路径拼接方式http://127.0.0.1/wui/index.html?ssoTokenXXX#/main正确的路径而非http://127.0.0.1/wui/index.html#/main?ssoTokenXXX错误的路径。至于泛微E9系统如何开启Token认证注册第三方应用等配置不在这里赘述这里以第三方系统的视角通过JSP脚本来模拟单点登录到OA主页面。示例如下% page importjava.io.BufferedReader % % page importjava.io.DataOutputStream % % page importjava.io.InputStreamReader % % page importjava.net.HttpURLConnection % % page importjava.net.URL % % page contentTypetext/html;charsetUTF-8 languagejava % %! //封装发送Post请求方法 String post(String urlPath) throws Exception{ URL urlnew URL(urlPath); HttpURLConnection httpConn(HttpURLConnection)url.openConnection(); httpConn.setDoOutput(true); httpConn.setDoInput(true); httpConn.setUseCaches(false); httpConn.setRequestMethod(POST); httpConn.setRequestProperty(Connection, Keep-Alive); httpConn.setRequestProperty(Charset, UTF-8); httpConn.connect(); DataOutputStream dosnew DataOutputStream(httpConn.getOutputStream()); dos.writeBytes(null); dos.flush(); dos.close(); int resultCodehttpConn.getResponseCode(); if(HttpURLConnection.HTTP_OKresultCode){ StringBuffer sbnew StringBuffer(); String readLinenew String(); BufferedReader responseReadernew BufferedReader(new InputStreamReader(httpConn.getInputStream(),UTF-8)); while((readLineresponseReader.readLine())!null){ sb.append(readLine).append(\n); } responseReader.close(); return sb.toString(); } return null; } % % //1.第三方系统获取token //参数说明appid为泛微方提供的三方系统的应用id //参数说明loginid为OA身份账号根据OA系统配置的映射规则可以是登录账号、可以是工号、可以是邮箱等等这里以固定账号示例实际应获取真实用户的账号信息 String getTokenUrl http://127.0.0.1:8809/ssologin/getToken?appiddemo1loginidzhangsan;//token接口地址 String ssoToken post(getTokenUrl); //2.携带ssoToken单点登录到OA首页 if (ssoToken ! null) { String oa_url http://127.0.0.1:8809/wui/index.html?ssoTokenssoToken#/main; response.sendRedirect(oa_url); return; } % html head titleSSO单点登录/title /head body /body /html