使用Java REST Client示例来访问CAS REST API

时间:2014-03-25 04:19:50

标签: rest cas jasig

我按照this教程在我的本地CAS服务器上启用了REST服务。

但是没有Java示例

" Java REST客户端示例

我们需要一个真实的,有效的例子,前一个是没用的。很多人都通过电子邮件告诉我它无法正常工作,我确认它不起作用。"

我能够找到this,但不幸的是,这对我不起作用。

任何指针/链接?非常感谢。

4 个答案:

答案 0 :(得分:17)

知道了!

以下是有关如何启用CAS REST API并能够通过JAVA REST客户端连接到其他人的完整解决方案

  • 获取CAS源代码。
  • 评论this文章
  • 将以下内容添加到pom.xml中,如#2
  • 中的文章所示

<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>${cas.version}</version> <type>jar</type> </dependency>

  • 确保将以下内容添加到pom.xml以避免Spring jar冲突。在我的例子中,cas-server-integration-restlet依赖于spring-web,它默认使用旧版本的Spring。所以,我明确定义了

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.1.RELEASE</version> </dependency>

  • 编译您的cas代码。应该在你的目标文件夹中获得cas.war。
  • 将其上传到您的服务器,更改tomcat的权限并等待它部署
  • 在CATALINA / conf中找到server.xml并取消注释8443端口配置,以便我们的服务器允许SSL连接。另外,请在此处指定您的证书。
  • 现在导航到展开的cas.war文件并深入到WEB-INF文件夹以查找deployerConfigContext.xml文件。指定CAS用于进行身份验证的内容。就我而言,我使用了LDAP。
  • 上面的文章
  • 将以下内容添加到web.xml中

<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>

  • 重新启动tomcat以使更改生效。
  • 测试您是否可以通过标准CAS用户界面登录:https://server:8443/cas/login
  • 通过以下方式测试REST API:https://server:8443/cas/v1/tickets
  • 现在让我们连接它。我使用了this示例代码。确保提供正确的链接和用户名/密码
  • 当我尝试按原样运行代码时,它抱怨&#34;引起:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath .SunCertPathBuilderException:无法找到所请求目标的有效证书路径&#34;。基本上要求您安装证书。如果您可以访问服务器,只需将其复制即可。如果没有,我找到了this代码,如果您没有访问权限或者只是太懒,将会为您安装:)
  • 现在,如果您使用有效凭据运行JAVA CAS客户端,您应该会看到类似
  • 的内容
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
  • 您可以看到200个代码和票证。如果您要在服务器上查看cas的日志,则应该会看到有关成功验证和生成故障单的消息。
  • 将用户名/密码更改为某些虚拟数据并尝试运行代码。您将收到400错误消息,这意味着拒绝访问权限。

成功!

答案 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"

要让您的服务客户端能够调用该服务,您需要遵循以下简单规则:

  1. 从CAS
  2. 获取您的机票授予票
  3. 从cas获取服务票据以获取指定的服务电话(服务电话)
  4. 验证您的服务票证验证程序(此时在springTicketValidation上指定的URL)
  5. 最后致电您的服务
  6. 或代码透视

    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)
    

    对于您的说明,所有这些操作都应在以下条件下完成:

    1. 您的电话(重拨电话和服务电话)应该在同一个HttpClient对象中完成。似乎CAS在会话对象中放置“东西”,在您调用服务时验证。失败了,您将始终在HTTP结果上获得登录页面。
    2. 您的cas客户端应该能够识别您的CAS SSL证书,否则会导致PKIX路径构建失败
    3. 此示例基于使用Spring Security通过CAS保护服务的cas安全Web服务。我不确定其他cas安全是否需要在应用程序端进行票证验证
    4. 希望这个帮助