我按照this教程在我的本地CAS服务器上启用了REST服务。
但是没有Java示例
" Java REST客户端示例
我们需要一个真实的,有效的例子,前一个是没用的。很多人都通过电子邮件告诉我它无法正常工作,我确认它不起作用。"
我能够找到this,但不幸的是,这对我不起作用。
任何指针/链接?非常感谢。
答案 0 :(得分:17)
知道了!
以下是有关如何启用CAS REST API并能够通过JAVA REST客户端连接到其他人的完整解决方案
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-integration-restlet</artifactId>
<version>${cas.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>com.noelios.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://server:8443/cas/login
https://server:8443/cas/v1/tickets
201 https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name Tgt is : TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name.ndev.coic.mil Service url is : service=https%3A%2F%2Fmyserver.com%2FtestApplication https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name Response code is: 200 200 ST-4-BZNVm9h6k3DAvSQe5I3C-server_name
成功!
答案 1 :(得分:4)
对于CAS 4.0,它有点简单(在apache-tomcat-7.0.55上测试)
pom.xml中的添加以下依赖项
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-integration-restlet</artifactId>
<version>4.0.0</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
对springframework的直接依赖不是必要的,因为排除会阻止重复的包
在你的web.xml中你需要为restlet添加servlet映射(思维包已经从com.noelios.restlet改为...到org.restlet ......
<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>
由于上面的步骤,在yuor 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
答案 2 :(得分:2)
如果您希望跳过证书验证,请将其添加到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
// ////////////////////////////////////////////////////////////////////////////////////
答案 3 :(得分:2)
通常开发人员在访问安全的CAS Web服务时如何让休息客户端工作时感到困惑。大多数问题都在询问如何让restlet CAS保护web服务以及如何调用这些Web服务,因为没有真正的例子可行。
实际上有。 Groovy示例在JASIG Cas restlet示例中https://wiki.jasig.org/display/casum/restful+api清楚地显示了如何通过身份验证来调用服务(使用Groovy,但转换为Java应该是直截了当的)。但在我看来,它没有明确解释客户端在访问CAS安全Web服务之前需要首先对指定的Web服务进行身份验证。例如,假设有一个使用CAS保护并使用Java和Spring构建的JSON服务。并且您正在使用在https://wiki.jasig.org/display/casum/restful+api
上的groovy部分描述的代码String casUrl="https://yourcas.com/v1/tickets"
String springTicketValidation="http://yourservice.com/j_spring_cas_security_check"
String serviceToCall="http://yourservice.com/serviceToCall"
要让您的服务客户端能够调用该服务,您需要遵循以下简单规则:
或代码透视
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)
对于您的说明,所有这些操作都应在以下条件下完成:
HttpClient
对象中完成。似乎CAS在会话对象中放置“东西”,在您调用服务时验证。失败了,您将始终在HTTP结果上获得登录页面。希望这个帮助