`
equalxx
  • 浏览: 65342 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

CAS4.0版本restful API部署及调用(http版)

阅读更多

最近刚开始做后台,有很多知识亟需补充。

 

几个平台要统一登录接口,由于投资方的系统使用CAS进行单点登录,我们也只能部署cas。架构师表示有很多比CAS更好的框架,比如openAM之类的。

 

结果从网上搜到的看起来貌似官方的教程略不靠谱,很多网站的教程还都是3.n的版本号,里面getticket时候需要com.noelios.restlet的包,尼玛至少4.0已经不需要这些包了,把它们配置进去是不科学的。

 

环境是win10 64bit

 

使用restful API只需要在服务端做以下几个动作:

一:下载源码(https://www.apereo.org/projects/cas/download-cas我选的是cas server 4.0.0,需要下的是source code:https://github.com/apereo/cas/archive/v4.0.0.zip),解压zip后在cas-4.0.0\cas-server-webapp\pom.xml中配置cas-server-integration-restlet

 

<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-integration-restlet</artifactId>
    <version>${project.version}</version>
     <scope>compile</scope>
</dependency>

或也可以
<!-- https://mvnrepository.com/artifact/org.jasig.cas/cas-server-integration-restlet -->
<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-integration-restlet</artifactId>
    <version>4.0.0</version>
     <type>jar</typee>
</dependency>

 

 

二:编译

我特别傻缺地把源码导入了Eclipse,想要Eclipse自己编译顺便还能好好看看代码,结果Eclipse一直在校验,环境都挂了不知道多少回。然后同事说直接用maven自带命令去执行就好了。编译时候只需要编译webapp就可以了。

打开cmd,在cas-4.0.0\cas-server-webapp目录下执行mvn clean package即可,生成的文件在cas-4.0.0\cas-server-webapp\target下

 

三:将编译好的cas.war部署到tomcat中,这个应该都会,就不赘述了。重点来了,配置webapps\cas\WEB-INF\web.xml。这里servlet-name是restlet,然后对应的配置已经存在于WEB-INF\restlet-servlet.xml中,两个名字是对应的,如果servlet-name是api,对应配置就是api-servlet.xml

 

    <servlet>
	 <servlet-name>restlet</servlet-name>
        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>restlet</servlet-name>
        <url-pattern>/v1/*</url-pattern>
    </servlet-mapping>

 

 

重启启动,我没有配https,直接调http://localhost:8090/cas/v1/tickets,如果结果如下图,就是部署restful成功了



用postman可以请求出结果,如下图

  

 

四:测试代码

代码参照了http://www.cnblogs.com/sunshineatnoon/p/4119565.html,不过她用的https,我用的http,强制转换的类不一样,大家各取所需了。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class CasTest {

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

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

		String url = "http://localhost:8090/cas/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://localhost:8080/CasClient";
				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;
		}

	}

	static URLConnection openConn(String urlk) throws MalformedURLException, IOException {

		URL url = new URL(urlk);
		HttpURLConnection hsu = (HttpURLConnection) url.openConnection();
		hsu.setDoInput(true);
		hsu.setDoOutput(true);
		hsu.setRequestMethod("POST");
		return hsu;

	}

	static void closeConn(HttpURLConnection c) {
		c.disconnect();
	}

}

 里面用户名密码,子服务什么的,自己填入吧。

 

以上就没什么问题了:)

 

如果觉得文章好的话,鼓励一下吧:D




 
 

 

  • 大小: 69.9 KB
  • 大小: 144.5 KB
0
4
分享到:
评论

相关推荐

    CAS restful接口调用

    ### CAS Restful接口调用详解 #### 一、CAS简介 CAS(Central Authentication Service)是一种开源的单点登录协议和服务实现。它旨在减轻单一Web应用的登录流程,并为多个服务提供一个集中式的认证机制。CAS支持...

    浅谈java调用Restful API接口的方式

    "Java调用Restful API接口的方式" Java调用Restful API接口是Java开发中非常重要的一部分,了解Java调用Restful API接口的方式可以帮助开发者更好地理解和使用相关技术。本文将详细介绍Java调用Restful API接口的...

    spring4.0的restful webservice构建和发布

    在本项目中,我们主要探讨的是如何利用Spring框架的4.0版本来构建RESTful Web服务并进行发布。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使得客户端和服务器...

    CAS RESTful API 开发文档

    当前最新版本 cas-server-3.4.2 , cas-client-3.1.10 2. 安装 server l 解压 cas-server-3.4.2 ,将 cas-server-3.4.2\modules\cas-server-webapp-3.4.2.war 拷贝到 tomcat 的 webapps 下。 3. 配置 server ...

    Python Flask高级编程之RESTFul API前后端分离精讲第七章节

    Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...

    cas-server-4.0.0-release+cas-client-3.2.1-release

    在给定的文件中,我们有两个主要的部分:`cas-server-4.0.0-release` 和 `cas-client-3.2.1-release`,分别代表CAS服务器端的4.0.0版本和客户端的3.2.1版本。 **CAS服务器端4.0.0版本** CAS服务器是整个SSO系统的...

    .NET 作为客户端调用WEBAPI RESTFUL服务端以及如何开发RESTFUL服务端用于客户端调用

    本篇文章将详细探讨.NET作为客户端调用WebAPI RESTful服务端的方法,以及如何开发RESTFUL服务端以供客户端调用。 首先,让我们了解一下客户端如何使用.NET调用WebAPI RESTful服务端。这通常涉及以下几个步骤: 1. ...

    cas4.0集成restle所需jar文件

    CAS 4.0 是 CAS 的一个较旧版本,但仍然被许多机构和组织使用。集成 RESTle 则是为了将 CAS 的功能扩展到RESTful API接口,使得非Web应用也能受益于CAS的安全认证。 RESTle(Representational State Transfer for ...

    k8s restful api 访问

    restful api访问k8s集群,增删改查信息。 需要预先创建访问权限的配置。 官网api文档 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/ 下面罗列部分api curl -u admin:admin ...

    Python-Python3开发以及部署RESTfulAPI项目

    本项目旨在介绍如何利用Python3、Django2.0框架、Django REST Framework(DRF)、CentOS7操作系统、uWSGI服务器以及Nginx反向代理来开发和部署RESTful API项目。 1. **Python3**:Python3是Python编程语言的最新...

    c c++实现http服务 c c++开发restful api服务

    本文将深入探讨如何使用C和C++来实现HTTP服务,并开发RESTful API服务器。 首先,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。它是一个基于请求与...

    cas4.2.4、cas4.0war包

    在您提供的信息中,我们有两个版本的CAS服务器WAR包:cas-server-webapp-4.2.4-.war 和 cas-server-webapp-4.0.0.war。这两个文件是Java Web应用程序,可以部署在支持Servlet容器如Tomcat或Jetty上。 **CAS 4.2.4**...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    基于tp5的restfulapi风格接口oauth20接口版本管理

    本项目“基于tp5的restfulapi风格接口oauth20接口版本管理”旨在利用ThinkPHP5框架实现一个支持OAuth2.0授权协议的RESTful API,提供接口版本管理功能,这在现代Web服务和移动应用开发中至关重要。 首先,让我们...

    .net4.0_webapi.zip

    《.NET 4.0 WebAPI开发指南:构建高效RESTful服务》 WebAPI是Microsoft为构建RESTful服务提供的一种框架,它允许开发者使用.NET Framework 4.0创建功能强大的HTTP服务。本教程将深入探讨如何利用.NET 4.0搭建WebAPI...

    RESTful API设计规范

    ### RESTful API设计规范详解 #### 一、RESTful简介 RESTful是一种广泛应用于Web服务的设计风格,全称为Representational State Transfer(表述性状态转移)。它并非一项具体的技术标准,而是一系列设计原则和约束...

    c# 服务端调用RestFul Service的方法

    本文档将详细介绍如何使用 C# 创建和调用 RESTful 接口,包括 RESTful 的基本概念、如何构建 RESTful 风格的 API、服务端的具体实现步骤以及客户端如何调用服务端接口等内容。此外,还将提供详细的代码示例,以便...

    Python Flask高级编程之RESTFul API前后端分离精讲第一讲解

    Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...

    thinkphp6 RESTful API开发

    thinkphp6 RESTful API开发 开发过程记录笔记 https://blog.csdn.net/weixin_41120504/article/details/115638094

Global site tag (gtag.js) - Google Analytics