外系统单点登陆NCC或者单点登陆BIP开发

外系统单点登陆NCC或者单点登陆到用友BIP高级版的例子,提供专业的NC二次开发服务

1.NCC端处理内容
1.1在NC Cloud的系统注册表sm_oauth_security注册第三方系统
表中各字段含义如下:

CLIENT_ID :第三方系统编码,必需项

CLIENT_NAME: 第三方系统名称,非必需

CLIENT_SECURITY: 第三方系统和NC Cloud共同维护的秘钥对

PK_OAUTH_SECURITY: 主键,

CLIENT_URL: 第三方系统的url (供NC Cloud集成访问第三方系统使用,本环节不需要)

CLIENT_AUTHCLASS: 登录第三方系统授权类 (供NC Cloud集成访问第三方系统使用,本环节不需要)

PK_GROUP:非本环节使用,设置为空

1.2设置白名单
在ncchome的路径:E:\yonyou\home\ierp\sf\ nccssoConfig.xml添加不拦截的配置 

package ncc.chenhaifeng.qq767574478;



import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
/**
 * tel=17377029836
 * @author chenhaifeng qq767574478
 * 单点登陆到NCC  NCC2111 BIP例子
 *
 */
public class SsoNcc{

    //第三方系统数据源 数据源的编码,本地开发为design 正式环境打开sysconfig查看
    public static String dsname = "design";
    //第三方id 注册时固定值
    public static String client_id = "health";
    //预订密钥
    public static String client_security = "a49c24eeff6b1f6e0ab1a8fddc9ba5e27fbe2464c01d4ffa62db36f6d747f1db";
    //开发环境默认develop账套 正式环境登陆root查看
    public static String busicentercode = "develop";
    //单点登陆到首页NCC 固定
    public static String redirect_uri = "http://127.0.0.1:3006/nccloud";
    //单点登录 获取token基本url 固定
    public static String url = "http://127.0.0.1:9999/service/genThirdPartyAccessToken";
    //通用地址 固定
    public static String basic_url = "http://127.0.0.1:3007/nccloud/resources/uap/rbac/thirdpartylogin/main/index.html?";

    /**
     * 单点登录
     *NC开发chenhaifeng qq767574478
     * @param
     * @return
     * @throws Exception 
     */
    
    public static void main(String[] args) throws Exception {
	
        String usercode = "yonyou2";//用户的编码
        //String url="http://127.0.0.1:9999/service/genThirdPartyAccessToken";
        String security = genKey(usercode, usercode + client_security + (System.currentTimeMillis() + "").substring(0, 6));
        String write = "type=type_security&dsname=" + dsname + "&usercode=" + usercode + "&client_id=" + client_id + "&security=" + security + "&busicentercode=" + busicentercode;
        write = write.replaceAll("\\+", "%2B");//避免出现特殊符号问题。
        //获取token
        String token = getToken(url, write);
        if ("".equals(token)) {
            System.out.println("获取token失败");
           
        }
        //单点成功后的跳转路径,这里为首页工作桌面
//        String redirect_uri = "http://127.0.0.1:3006/nccloud";
//        String redirect_uri_ydd = "http://127.0.0.1:3006/nccloud/resources/workbench/public/common/main/index.html#/ifr?ifr=%252Fuapbd%252Fpsninfo%252Fpsndoc%252Fmain%252Findex.html&ifr=%252Fpu%252Fmedicalbook%252Fmedicalbookmasternew%252Fmain%252Findex.html&c=MeHdicalbook&p=MeHdicalbook_MedicalbookMasterNew&ar=1001ZZ1000000002C4UB&n=%25E4%25BD%2593%25E6%25A3%2580%25E9%25A2%2584%25E8%25AE%25A2%25E5%258D%2595&b1=%25E4%25BE%259B%25E5%25BA%2594%25E9%2593%25BE&b2=%25E9%2587%2587%25E8%25B4%25AD%25E7%25AE%25A1%25E7%2590%2586&b3=%25E9%2587%2587%25E8%25B4%25AD%25E5%2588%25B0%25E8%25B4%25A7";

        //单点登陆时的全路径,可以直接粘贴到浏览器进行访问。
        String fullUrl =  basic_url +"accesstoken=" + token + "&redirect_uri=" + redirect_uri;
        System.out.println("获取的token为:" + token);
        System.out.println("单点登陆全路径,复制到浏览器地址栏即可:" + fullUrl);
       
    }




    /**
     * 调用接口获取token
     *
     * @param url   要调用的接口
     * @param write 需要写出的数据
     * @return token值
     * //NC专业开发服务,联系chenhaifeng qq767574478
     */
    private static String getToken(String url, String write) {
        OutputStream outStream = null;
        DataOutputStream dataOutput = null;
        InputStream inStream = null;
        String ret = "";
        try {
            URL preUrl = new URL(url);
            URLConnection con = preUrl.openConnection();

            //设置为true,后面可以调用getOutputStream并传输数据 //NC专业开发服务,联系chenhaifeng qq767574478
            con.setDoOutput(true);
            //不使用http缓存
            con.setUseCaches(false);
            //设置http请求头
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Content-Length", "10000");

            HttpURLConnection httpCon = (HttpURLConnection) con;
            //这里使用post方式调用接口
            httpCon.setRequestMethod("POST");
            //获取输出流
            outStream = httpCon.getOutputStream();
            dataOutput = new DataOutputStream(outStream);
            //接口需要的参数作为字节序列写入输出流
            dataOutput.writeBytes(write);
            dataOutput.flush();
            //获取输入流
            inStream = httpCon.getInputStream();
            //读取服务返回的数据
            int ch;
            while ((ch = inStream.read()) != -1) {
                ret += String.valueOf((char) ch);
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            //关闭服务输入流和输出流 //NC专业开发服务,联系chenhaifeng qq767574478
            if (dataOutput != null) {
                try {
                    dataOutput.close();
                } catch (Exception e2) {
                }
            }
            if (outStream != null) {
                try {
                    outStream.close();
                } catch (Exception e2) {
                }
            }
            if (inStream != null) {
                try {
                    inStream.close();
                } catch (Exception e2) {
                }
            }
        }
        //返回获取到的token
        return ret;
    }

    private static String genKey(String userid, String key) throws Exception {
        return new org.apache.commons.codec.binary.Base64().encodeToString(SignatureTookKit.digestSign(userid.getBytes(), key.getBytes()));
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值