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

HttpClient CAS

阅读更多
package com.lch.sso;

import java.io.IOException;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * An example Java client to authenticate against CAS using REST services.
 * Please ensure you have followed the necessary setup found on the <a
 * href="http://www.ja-sig.org/wiki/display/CASUM/RESTful+API">wiki</a>.
 *
 * @author <a href="mailto:jieryn@gmail.com">jesse lauren farinacci</a>
 * @since 3.4.2
 */
public final class SSO
{
  private static final Logger LOG = Logger.getLogger(SSO.class.getName());

  private SSO()
  {
    // static-only access
  }

  public static String getTicket(final String server, final String username,
      final String password, final String service)
  {
    notNull(server, "server must not be null");
    notNull(username, "username must not be null");
    notNull(password, "password must not be null");
    notNull(service, "service must not be null");

    return getServiceTicket(server, getTicketGrantingTicket(server, username,
        password), service);
  }

  private static String getServiceTicket(final String server,
      final String ticketGrantingTicket, final String service)
  {
    if (ticketGrantingTicket == null)
      return null;

    final HttpClient client = new HttpClient();

    final PostMethod post = new PostMethod(server + "/" + ticketGrantingTicket);

    post.setRequestBody(new NameValuePair[] { new NameValuePair("service",
        service) });

    try
    {
      client.executeMethod(post);

      final String response = post.getResponseBodyAsString();

      switch (post.getStatusCode())
      {
        case 200:
          return response;

        default:
          LOG.warning("Invalid response code (" + post.getStatusCode()
              + ") from CAS server!");
          LOG.info("Response (1k): "
              + response.substring(0, Math.min(1024, response.length())));
          break;
      }
    }

    catch (final IOException e)
    {
      LOG.warning(e.getMessage());
    }

    finally
    {
      post.releaseConnection();
    }

    return null;
  }

  private static String getTicketGrantingTicket(final String server,
      final String username, final String password)
  {
    final HttpClient client = new HttpClient();

    final PostMethod post = new PostMethod(server);

    post.setRequestBody(new NameValuePair[] {
        new NameValuePair("username", username),
        new NameValuePair("password", password) });

    try
    {
      client.executeMethod(post);

      final String response = post.getResponseBodyAsString();

      switch (post.getStatusCode())
      {
        case 201:
        {
          final Matcher matcher = Pattern.compile(".*action=\".*/(.*?)\".*")
              .matcher(response);

          if (matcher.matches())
            return matcher.group(1);

          LOG
              .warning("Successful ticket granting request, but no ticket found!");
          LOG.info("Response (1k): "
              + response.substring(0, Math.min(1024, response.length())));
          break;
        }

        default:
          LOG.warning("Invalid response code (" + post.getStatusCode()
              + ") from CAS server!");
          LOG.info("Response (1k): "
              + response.substring(0, Math.min(1024, response.length())));
          break;
      }
    }

    catch (final IOException e)
    {
      LOG.warning(e.getMessage());
    }

    finally
    {
      post.releaseConnection();
    }

    return null;
  }

  private static void notNull(final Object object, final String message)
  {
    if (object == null)
      throw new IllegalArgumentException(message);
  }

  public static void main(final String[] args)
  {
    final String server = "https://localhost:8443/cas/login";
    final String username = "admin";
    final String password = "123456";
    final String service = "http://localhost:9001/tshow";

    LOG.info(getTicket(server, username, password, service));
  }
}
分享到:
评论
1 楼 holleyangyanges 2014-05-22  
你试过你的代码吗?

相关推荐

    单点登录CAS应用代码(HTTP)

    CAS(Central Authentication Service)是Java开发的一个开源SSO项目,由耶鲁大学创建,旨在简化Web应用程序的身份验证过程。 在“单点登录CAS应用代码(HTTP)”中,我们关注的是基于HTTP协议实现的SSO服务。HTTP...

    cas-server-4.0.0-release与依赖包.zip

    5. **依赖库**:CAS运行所需的第三方库,包括Spring框架、Apache HttpClient等,这些库被用来处理HTTP请求、数据库连接等。 描述中的“CAS实现SSO单点登录”意味着CAS的主要功能就是提供SSO服务。它通过代理认证...

    cas单点登出的3个类

    在CAS的单点登出过程中,HttpClient被用来向其他应用发送登出通知。它提供了一套完善的API,可以设置请求头、方法、超时等,以确保登出消息能够准确无误地送达。 实现CAS单点登出涉及的技术点包括: - 了解HTTP协议...

    cas-client

    在 Java 应用中,CAS 客户端通常通过 Apache HttpClient 或者 Spring Security CAS 扩展来实现。 3. **配置 CAS 客户端**:在 Java 应用中集成 CAS 客户端,需要在应用的配置文件(如 `cas.properties` 或 `...

    cas单点登录配置及资源

    - jar包:包含CAS服务器运行所需的库,如Apache HttpClient、Spring Security等。 - war包:CAS服务器本身,部署在Tomcat中,启动后提供认证服务。 7. **资源文档** - 配置文档:详细记录了配置CAS服务器和服务...

    cas4.0集成restle所需jar文件

    5. **编写客户端代码**:在客户端应用中,需要使用HTTP客户端库(如Apache HttpClient或OkHttp)发起REST请求,并处理来自CAS服务器的响应。这可能包括获取和验证服务票据(service ticket)或者代理票据(proxy ...

    基于CAS认证的ManagerREST接口使用DEMO1

    1. Lib:这里存放的是项目所需的依赖jar包,这些包通常包括了对HTTP请求处理、JSON解析以及与CAS交互的相关库,例如Apache HttpClient、Jackson或者CAS的客户端库等。 2. Cof:这个目录下包含了配置文件,如...

    cas-client-java-2.1.1

    此外,还可能有其他依赖的库文件,如Spring、Apache HttpClient等,这些是支持CAS客户端运行所必需的。 3. **文档**:可能包含API文档(如Javadoc)和用户指南,帮助开发者了解如何配置和使用CAS客户端。这些文档会...

    cas3.4集成restle所需jar文件

    3. `restlet-ext-httpclient`: 提供了与Apache HttpClient的集成,用于处理HTTP通信。 4. `jersey-client`: 如果你打算使用Jersey作为REST客户端,这个库是必需的,它可以与Restlet配合使用。 5. `json-simple`: ...

    单点登入--CAS3.0

    - 还有一些工具和插件,如Apache HttpClient、Spring Security CAS模块,简化了CAS的配置和使用。 7. **扩展性**: - CAS3.0支持多种认证协议,如LDAP、数据库、Active Directory等,方便与现有身份管理系统集成...

    CAS单点登录之测试应用

    10. 工具使用:标签中提到的"工具"可能指用于测试、配置或管理CAS的相关工具,例如Apache HttpClient、Postman等,这些工具可以帮助开发者更好地进行测试和调试。 根据提供的文件名"casdemo01",这可能是一个示例...

    cas实现单点登录,登出(java和php客户端)

    9. **工具使用**:可能涉及到与CAS相关的工具,如Apache HttpClient用于HTTP通信,或者自动化测试工具模拟登录登出流程,验证CAS集成的正确性。 通过理解和实践这些知识点,开发者可以有效地在Java和PHP环境中实现...

    spring-boot-starter-samples:spring-boot-starter-samples

    3. **CAS**:Central Authentication Service(CAS)是一种广泛使用的单点登录(SSO)协议,Spring Boot starter for CAS可以让我们轻松地集成CAS服务。 4. **Druid**:Druid是一个优秀的数据库连接池,提供了监控...

    spring security 4 需要 jar 包

    spring security4 下载地址 ... 所需要 jar 包 apacheds-core-1.5.5....httpclient-4.1.1.jar jsr250-api-1.0.jar ldapsdk-4.1.jar openid4java-nodeps-0.9.6.jar shared-ldap-0.9.15-sources.jar shared-ldap-0.9.15.jar

    DotNet技术经典范例-每项技术一个好范例-3

    `WebClient`和`HttpClient`类是进行HTTP请求的常用工具,而`Socket`类则用于低级的TCP/IP通信。 这些范例涵盖了.NET开发中的关键主题,对于学习和提升.NET技能非常有帮助。每个范例通常会展示如何在实际场景中应用...

    J2EE项目开发常用Jar包源代码-src.zip

    spring-security-cas-client-3.0.3.RELEASE-sources.jar spring-security-config-3.0.3.RELEASE-sources.jar spring-security-core-3.0.3.RELEASE-sources.jar spring-security-ldap-3.0.3.RELEASE-sources.jar ...

    javaweb项目常用jar包

    cas-client-core-3.3.3.jar cglib-2.2.2.jar commons-beanutils-1.8.0.jar commons-cli-1.2.jar commons-codec-1.9.jar commons-collections-3.2.1.jar commons-dbcp-1.4.jar commons-fileupload-1.3.1.jar ...

    hyht-web-basic-v1脚手架的使用详情说明.docx

    在 `main.js` 中引入 `httpclient.js` 并调用其中的方法,可以将 HTTP 请求挂载到全局。例如,你可以在 `confin/index.js` 中配置 `auth` 方法来处理鉴权和 `sessionStorage` 操作。 7. **同步请求的使用**: ...

    《C# 数据安全手册》清晰PDF电子版(十分经典)

    C#的安全模型是基于.NET Framework的,它包含权限系统、代码访问安全性(Code Access Security, CAS)以及类型安全等机制。学习这一部分,开发者将理解如何在运行时限制代码的权限,以降低恶意代码的风险。 二、...

    大型实验-企业门户新闻网

    首先,统一登录系统通常基于单点登录(SSO)机制,如CAS(Central Authentication Service)或OAuth2,这需要对认证协议有深入理解,并能用Java实现相应的服务端逻辑。 信息聚合涉及从各种来源收集和整合数据,例如...

Global site tag (gtag.js) - Google Analytics