一、实际场景
前面的文章都是基于filter,即在web.xml文件中配置CAS的filter来完成单点登录的。现在实际场景基于SAP的NetWeaver开发的项目,是无法像上面的方式与CAS集成在一块的。强大的CAS已提供这种解决方法。参看下官方网站deep资料:https://wiki.jasig.org/display/CASC/Using+CAS+with+Java
我们看到有两种方式:
1. CAS Tag Library
2. CAS Java Objects
二、环境准备
Yale Java Client下载:https://legacy-java-cas-client.googlecode.com/files/cas-client-java-2.1.1.zip
三、CAS Java Objects
我们可以在LoginModel中实现如下代码,就可以满足我们的需求
String user = null; String errorCode = null; String errorMessage = null; String xmlResponse = null; /* instantiate a new ServiceTicketValidator */ ServiceTicketValidator sv = new ServiceTicketValidator(); /* set its parameters */ sv.setCasValidateUrl("https://secure.its.yale.edu/cas/serviceValidate"); sv.setService(urlOfThisService); sv.setServiceTicket(request.getParameter("ticket")); /* * If we want to be able to acquire proxy tickets (requires callback servlet to be set up * in web.xml - see below) */ String urlOfProxyCallbackServlet = "https://portal.yale.edu/CasProxyServlet"; sv.setProxyCallbackUrl(urlOfProxyCallbackServlet); /* contact CAS and validate */ sv.validate(); /* if we want to look at the raw response, we can use getResponse() */ xmlResponse = sv.getResponse(); /* read the response */ // Yes, this method is misspelled in this way // in the ServiceTicketValidator implementation. // Sorry. if(sv.isAuthenticationSuccesful()) { user = sv.getUser(); } else { errorCode = sv.getErrorCode(); errorMessage = sv.getErrorMessage(); /* handle the error */ } /* The user is now authenticated. */ /* If we did set the proxy callback url, we can get proxy tickets with: */ String urlOfTargetService = "http://hkg2.its.yale.edu/someApp/portalFeed"; String proxyTicket = edu.yale.its.tp.cas.proxy.ProxyTicketReceptor.getProxyTicket( sv.getPgtIou(),urlOfTargetService);
You may also authenticate users "manually" using the CAS Java objects. In this case, you would instantiate a new ServiceTicketValidator or ProxyTicketValidator. Notice that in the example below, the page already expects to receive a ticket parameter (this is the servlet that CAS returned to after the user logged in). If this servlet was accessed directly by a user, it would need to check that the request parameter, ticket, was not null. If it was null, the servlet would need to redirect to the CAS login page manually.
至此ticket和用户信息都已生成,单点登录成功。
此种方式是使用ServiceTicketValidator完成单点登录,其实我们也可以使用ProxyTicketValidator。
附录DEMO示例
package com.wy.cas.client; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; public class LoginModule extends HttpServlet{ private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String user = null; String errorCode = null; String errorMessage = null; String xmlResponse = null; if(null == request.getParameter("ticket") || "".equals(request.getParameter("ticket"))){ response.sendRedirect("http://127.0.0.1:8082/cas-server/login?service=http://127.0.0.1:8080/cas-test/login"); return; } /* instantiate a new ServiceTicketValidator */ ServiceTicketValidator sv = new ServiceTicketValidator(); /* set its parameters */ sv.setCasValidateUrl("http://127.0.0.1:8082/cas-server/serviceValidate"); sv.setService("http://127.0.0.1:8080/cas-test/login"); sv.setServiceTicket(request.getParameter("ticket")); /* contact CAS and validate */ try { sv.validate(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } /* if we want to look at the raw response, we can use getResponse() */ xmlResponse = sv.getResponse(); /* read the response */ // Yes, this method is misspelled in this way // in the ServiceTicketValidator implementation. // Sorry. if(sv.isAuthenticationSuccesful()) { user = sv.getUser(); } else { errorCode = sv.getErrorCode(); errorMessage = sv.getErrorMessage(); /* handle the error */ System.out.println("errorInfo -----------> "+errorCode +"\r\n"+errorMessage); } System.out.println("userInfo >>>>>>>>>>>> "+user); request.getSession().setAttribute("userInfo", user); request.getRequestDispatcher("index.jsp").forward(request, response); /* The user is now authenticated. */ } public static void main(String[] args){ } }
相关推荐
spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...
在这个"单点登录-cas学习项目源码"中,我们可以深入理解CAS如何工作以及如何在实际项目中集成和配置。主要包含以下几个关键知识点: 1. CAS服务器配置:CAS服务器是整个SSO系统的中心,负责处理用户的登录请求和...
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决...CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次认证即可访问多个相互独立的应用系统。在本文中,我们将深入探讨基于CAS3.0的单点登录实现,这是一项广泛应用的...
单点登录服务端项目cas-server单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-...
在"单点登录 - CAS【三】 LDAP认证源"这个主题中,我们将深入探讨如何将CAS与LDAP(Lightweight Directory Access Protocol)结合使用,以实现基于LDAP的身份验证。LDAP是一种轻量级的目录访问协议,广泛用于存储和...
CAS(Central Authentication Service)单点登录(Single Sign-On,简称SSO)是一种网络认证协议,旨在简化用户在多个应用系统间的登录流程。当用户通过CAS认证后,可以在无需再次输入凭证的情况下访问已接入CAS的...
本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统。CAS(Central Authentication Service)是 Yale 大学开发的一个开源项目...
`cas-shiro-demo-app` 是一个包含CAS和Shiro整合的示例应用,用于演示如何在实际项目中实现单点登录。这个示例可能包含以下组件: 1. **CAS服务器**:部署并配置CAS服务器,处理用户登录和票证验证。 2. **应用...
Java CAS 客户端是Java应用程序与中央认证服务(CAS)进行交互的一种工具,它使得在分布式环境中实现单点登录(Single Sign-On, SSO)成为可能。CAS 是一个开源项目,由耶鲁大学发起,旨在提供一种安全的Web身份验证...
【标题】"els-cas-templates.zip"是一个包含爱思唯尔(Elsevier)出版物的LaTeX模板的压缩文件。这些模板旨在帮助作者按照"your paper your way"的理念,以标准化格式准备科研论文。 【描述】中的"单栏、双栏模板"指...
在实际开发中,"gf-8-xgf-crud-cas-shiro_java_"项目可能还包括以下知识点: 1. **数据库交互**:使用JDBC、MyBatis或Hibernate进行数据持久化,可能涉及Oracle、MySQL等数据库。 2. **MVC模式**:Model-View-...
赠送jar包:shiro-cas-1.2.3.jar; 赠送原API文档:shiro-cas-1.2.3-javadoc.jar; 赠送源代码:shiro-cas-1.2.3-sources.jar; 赠送Maven依赖信息文件:shiro-cas-1.2.3.pom; 包含翻译后的API文档:shiro-cas-...
基于Java中CAS的单点登录,有服务端的所有源码,将tomcat目录下的所有资源直接拷到Tomcat服务中间件的webapp目录下,阅读tomcat-webapp中的read.txt文档,查看使用说明,适用于第一次开发CAS单点登录的同学们,简单...
sword-cas-client-java-1.0-beta-1.jar
SSO(Single Sign-On)是单点登录的缩写,是一种网络用户身份验证的机制,允许用户在一次登录后访问多个应用系统而无需再次验证。CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它...
赠送jar包:shiro-cas-1.2.3.jar; 赠送原API文档:shiro-cas-1.2.3-javadoc.jar; 赠送源代码:shiro-cas-1.2.3-sources.jar; 赠送Maven依赖信息文件:shiro-cas-1.2.3.pom; 包含翻译后的API文档:shiro-cas-...