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));
}
}
分享到:
相关推荐
CAS(Central Authentication Service)是Java开发的一个开源SSO项目,由耶鲁大学创建,旨在简化Web应用程序的身份验证过程。 在“单点登录CAS应用代码(HTTP)”中,我们关注的是基于HTTP协议实现的SSO服务。HTTP...
在CAS的单点登出过程中,HttpClient被用来向其他应用发送登出通知。它提供了一套完善的API,可以设置请求头、方法、超时等,以确保登出消息能够准确无误地送达。 实现CAS单点登出涉及的技术点包括: - 了解HTTP协议...
5. **依赖库**:CAS运行所需的第三方库,包括Spring框架、Apache HttpClient等,这些库被用来处理HTTP请求、数据库连接等。 描述中的“CAS实现SSO单点登录”意味着CAS的主要功能就是提供SSO服务。它通过代理认证...
在 Java 应用中,CAS 客户端通常通过 Apache HttpClient 或者 Spring Security CAS 扩展来实现。 3. **配置 CAS 客户端**:在 Java 应用中集成 CAS 客户端,需要在应用的配置文件(如 `cas.properties` 或 `...
- jar包:包含CAS服务器运行所需的库,如Apache HttpClient、Spring Security等。 - war包:CAS服务器本身,部署在Tomcat中,启动后提供认证服务。 7. **资源文档** - 配置文档:详细记录了配置CAS服务器和服务...
5. **编写客户端代码**:在客户端应用中,需要使用HTTP客户端库(如Apache HttpClient或OkHttp)发起REST请求,并处理来自CAS服务器的响应。这可能包括获取和验证服务票据(service ticket)或者代理票据(proxy ...
1. Lib:这里存放的是项目所需的依赖jar包,这些包通常包括了对HTTP请求处理、JSON解析以及与CAS交互的相关库,例如Apache HttpClient、Jackson或者CAS的客户端库等。 2. Cof:这个目录下包含了配置文件,如...
此外,还可能有其他依赖的库文件,如Spring、Apache HttpClient等,这些是支持CAS客户端运行所必需的。 3. **文档**:可能包含API文档(如Javadoc)和用户指南,帮助开发者了解如何配置和使用CAS客户端。这些文档会...
3. `restlet-ext-httpclient`: 提供了与Apache HttpClient的集成,用于处理HTTP通信。 4. `jersey-client`: 如果你打算使用Jersey作为REST客户端,这个库是必需的,它可以与Restlet配合使用。 5. `json-simple`: ...
- 还有一些工具和插件,如Apache HttpClient、Spring Security CAS模块,简化了CAS的配置和使用。 7. **扩展性**: - CAS3.0支持多种认证协议,如LDAP、数据库、Active Directory等,方便与现有身份管理系统集成...
10. 工具使用:标签中提到的"工具"可能指用于测试、配置或管理CAS的相关工具,例如Apache HttpClient、Postman等,这些工具可以帮助开发者更好地进行测试和调试。 根据提供的文件名"casdemo01",这可能是一个示例...
9. **工具使用**:可能涉及到与CAS相关的工具,如Apache HttpClient用于HTTP通信,或者自动化测试工具模拟登录登出流程,验证CAS集成的正确性。 通过理解和实践这些知识点,开发者可以有效地在Java和PHP环境中实现...
3. **CAS**:Central Authentication Service(CAS)是一种广泛使用的单点登录(SSO)协议,Spring Boot starter for CAS可以让我们轻松地集成CAS服务。 4. **Druid**:Druid是一个优秀的数据库连接池,提供了监控...
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
`WebClient`和`HttpClient`类是进行HTTP请求的常用工具,而`Socket`类则用于低级的TCP/IP通信。 这些范例涵盖了.NET开发中的关键主题,对于学习和提升.NET技能非常有帮助。每个范例通常会展示如何在实际场景中应用...
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 ...
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 ...
在 `main.js` 中引入 `httpclient.js` 并调用其中的方法,可以将 HTTP 请求挂载到全局。例如,你可以在 `confin/index.js` 中配置 `auth` 方法来处理鉴权和 `sessionStorage` 操作。 7. **同步请求的使用**: ...
C#的安全模型是基于.NET Framework的,它包含权限系统、代码访问安全性(Code Access Security, CAS)以及类型安全等机制。学习这一部分,开发者将理解如何在运行时限制代码的权限,以降低恶意代码的风险。 二、...
首先,统一登录系统通常基于单点登录(SSO)机制,如CAS(Central Authentication Service)或OAuth2,这需要对认证协议有深入理解,并能用Java实现相应的服务端逻辑。 信息聚合涉及从各种来源收集和整合数据,例如...