如何将CAS RESTful API 集成到Web应用中?

发布于 2022-09-02 16:16:35 字数 2820 浏览 10 评论 0

1、使用CAS构建SSO,用官网给的例子是没有问题的,就是在client端配置 cas-server的过滤器,登录认证以及退出登录都没有问题。
2、现在想用CAS的RESTful API 完成sso登录,根据官方文档测试api接口返回也都没有问题,代码如下:

public static void main(String... args) throws Exception {
    String username = "yjj";
    String password = "123";
    validateFromCAS(username, password);
}

public static boolean validateFromCAS(String username, String password) throws Exception {

    String url = "http://sso.cvs.cn:9990/cas-server-webapp/v1/tickets";
    try {
        HttpURLConnection hsu = (HttpURLConnection) openConn(url);
        String s = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8");
        s += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");

        System.out.println(s);
        OutputStreamWriter out = new OutputStreamWriter(hsu.getOutputStream());
        BufferedWriter bwr = new BufferedWriter(out);
        bwr.write(s);
        bwr.flush();
        bwr.close();
        out.close();

        String tgt = hsu.getHeaderField("location");
        System.out.println(hsu.getResponseCode());
        if (tgt != null && hsu.getResponseCode() == 201) {
            System.out.println(tgt);

            System.out.println("Tgt is : " + tgt.substring(tgt.lastIndexOf("/") + 1));
            tgt = tgt.substring(tgt.lastIndexOf("/") + 1);
            bwr.close();
            closeConn(hsu);

            String serviceURL = "http://sso.cvs.cn:7070/cas-simple-site-alpha/";
            String encodedServiceURL = URLEncoder.encode("service", "utf-8") + "=" + URLEncoder.encode(serviceURL, "utf-8");
            System.out.println("Service url is : " + encodedServiceURL);

            String myURL = url + "/" + tgt;
            System.out.println(myURL);
            hsu = (HttpURLConnection) openConn(myURL);
            out = new OutputStreamWriter(hsu.getOutputStream());
            bwr = new BufferedWriter(out);
            bwr.write(encodedServiceURL);
            bwr.flush();
            bwr.close();
            out.close();
            System.out.println("Response code is:  " + hsu.getResponseCode());
            BufferedReader isr = new BufferedReader(new InputStreamReader(hsu.getInputStream()));
            String line;
            System.out.println(hsu.getResponseCode());
            while ((line = isr.readLine()) != null) {
                System.out.println(line);
            }
            isr.close();
            hsu.disconnect();
            return true;
        } else {
            return false;
        }
    } catch (MalformedURLException mue) {
        mue.printStackTrace();
        throw mue;
    } catch (IOException ioe) {
        ioe.printStackTrace();
        throw ioe;
    }
}

3、问题是如何将这个 API整合到实际的client项目中,需要配置 filter之类的吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文