使用Java REST客户端示例访问CAS REST API
我按照教程在本地CAS服务器上启用REST服务 但是,没有Java示例 Java REST客户端示例 我们需要一个真正有效的例子,前一个是无用的。许多人给我发电子邮件说它不起作用,我确认它不起作用。” 我能够找到,但不幸的是,这对我不起作用 有指针/链接吗?非常感谢。收到了 下面是关于如何启用CAS REST API并能够通过JAVA REST客户端连接到它以使其他人受益的完整解决方案使用Java REST客户端示例访问CAS REST API,rest,cas,jasig,Rest,Cas,Jasig,我按照教程在本地CAS服务器上启用REST服务 但是,没有Java示例 Java REST客户端示例 我们需要一个真正有效的例子,前一个是无用的。许多人给我发电子邮件说它不起作用,我确认它不起作用。” 我能够找到,但不幸的是,这对我不起作用 有指针/链接吗?非常感谢。收到了 下面是关于如何启用CAS REST API并能够通过JAVA REST客户端连接到它以使其他人受益的完整解决方案 获取CAS源代码 评论文章 向pom.xml添加以下内容,如#2中的文章所建议 org.jasig.ca
- 获取CAS源代码
- 评论文章
- 向pom.xml添加以下内容,如#2中的文章所建议
org.jasig.cas
示例代码。确保提供正确的链接和用户名/密码
当我尝试按原样运行代码时,它抱怨“原因是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径”。基本上要求你安装证书。如果您有权访问服务器,只需将其复制过来即可。如果没有,我发现了一些代码,如果您没有访问权限或太懒,这些代码将负责您的安装:)
现在,如果使用有效凭据运行JavaCAS客户机,您应该会看到如下内容
- 你可以看到200码和票。如果您要查看服务器上CA的日志,您应该会看到有关成功的身份验证和票证生成的消息
- 将用户名/密码更改为一些虚拟数据并尝试运行代码。您将收到400条错误消息,这意味着访问权限被拒绝
成功 如果希望跳过证书验证,请将其添加到Java客户端
//////////////////////////////////////////////////////////////////////////////////////
// this block of code turns off the certificate validation so the client can talk to an SSL
// server that uses a self-signed certificate
//
// !!!! WARNING make sure NOT to do this against a production site
//
// this block of code owes thanks to http://www.exampledepot.com/egs/javax.net.ssl/trustall.html
//
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
}
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
//
//
// end of block of code that turns off certificate validation
// ////////////////////////////////////////////////////////////////////////////////////
在访问安全的CAS web服务时,开发人员通常对如何让rest客户端工作感到困惑。大多数问题都是问如何让restletcas保护web服务,以及如何调用这些web服务,因为没有真正的例子起作用
事实上有。Groovy示例是关于JASIG Cas restlet的示例,它清楚地展示了如何通过身份验证来调用服务(它使用Groovy,但转换为Java应该是直接的)。但在我看来,它并没有清楚地解释客户端在访问CAS安全web服务之前需要首先对指定的web服务进行身份验证
例如,假设有一个JSON服务,它由CAS保护,并由Java和Spring构建。您使用的代码在上的groovy部分中进行了描述
要使您的服务客户端能够调用该服务,您需要遵循以下简单规则:
从CAS处获取您的机票授予票
从cas获取指定服务呼叫(服务呼叫)的服务票证
向服务票证验证器进行身份验证(此时在springTicketValidation上指定url)
最后打电话给你
或者在代码透视图中
String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
// validate your ticket first to your application
getServiceCall(springTicketValidation, serviceTicket)
getServiceCall(serviceToCall, serviceTicket)
请注意,所有这些操作应在以下条件下进行:
您的调用(restlet调用和服务调用)应该在同一个HttpClient
对象中完成。似乎CAS在会话对象中放入了“某物”,在您调用服务时进行了验证。失败,您将始终在HTTP结果上获得登录页
您的cas客户端应该能够识别您的cas SSL证书,否则它将使您的PKIX路径生成失败
此示例基于cas安全web服务,该服务使用Spring Security来保护cas的服务。我不确定其他受保护的CA是否需要在应用程序端进行票证验证
希望这对CAS 4.0有所帮助,它更简单一些(在apache-tomcat-7.0.55上测试)
在pom.xml中添加以下依赖项
org.jasig.cas
cas服务器集成restlet
4.0.0
运行时
org.springframework
SpringWebMVC
org.springframework
spring上下文
org.springframework
弹簧芯
不必直接依赖于springframework,因为排除会阻止重复的包
在web.xml中,您需要为restlet添加servlet映射(mind package已从com.noelios.restlet…更改为org.restlet
再出租
org.restlet.ext.spring.RestletFrameworkServlet
1.
再出租
/v1/*
在YOUR WEB-INF/lib目录中执行上述步骤后,应添加以下新文件
ls target/cas/WEB-INF/lib/ | grep restlet
cas-server-integration-restlet-4.0.0.jar
org.restlet-2.1.0.jar
org.restlet.ext.servlet-2.1.0.jar
org.restlet.ext.slf4j-2.1.0.jar
org.restlet.ext.spring-2.1.0.jar
您好!回答有用!您能告诉我应该在服务url中添加什么吗?我假设您引用的是字符串serviceURL=“”;line…如果是这种情况,它应该引用您的请求应用程序,该应用程序请求CAS通知当前用户。请访问此网站:在第一步中,您可以看到他们的解释:(这项服务是免费提供的并不重要,因为您所要的票证是url的一部分,即使您的浏览器找不到资源,它也会出现在位置栏中。也可以在CAS上逐步查看此网站。这会让您很好地了解此过程中涉及的步骤。希望对您有所帮助……并感谢您的反馈。)确认!是的,这就是我的意思!谢谢。因此,如果我理解正确,无论服务是否存在,我都可以获得票证。在我的情况下,我没有sampleapp,我只想测试CAS服务器。因此,服务url是否指向不存在的内容并不重要。对吗?是的。正确,您仍然可以测试CAS并获得票证电子机票返回,您不需要实际使用的服务
String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
// validate your ticket first to your application
getServiceCall(springTicketValidation, serviceTicket)
getServiceCall(serviceToCall, serviceTicket)
ls target/cas/WEB-INF/lib/ | grep restlet
cas-server-integration-restlet-4.0.0.jar
org.restlet-2.1.0.jar
org.restlet.ext.servlet-2.1.0.jar
org.restlet.ext.slf4j-2.1.0.jar
org.restlet.ext.spring-2.1.0.jar