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

CAS

阅读更多

需求描述1:大家知道J2EE应用程序都可以用类型以下形式进行保护: 

Xml代码  收藏代码
  1. <login-config>  
  2.      <auth-method>FORM</auth-method>  
  3.      <form-login-config>  
  4.      <form-login-page>/login.jsp</form-login-page>  
  5.      <form-error-page>/failure.jsp</form-error-page>  
  6.      </form-login-config>  
  7.      <realm-name>Security Realm</realm-name>  
  8.  </login-config>  
  9.  <security-constraint>   
  10.     <display-name>Tomcat security constraint</display-name>   
  11.     <web-resource-collection>   
  12.          <web-resource-name>Protected Resources</web-resource-name>   
  13.          <url-pattern>/security/*</url-pattern>   
  14.    </web-resource-collection>   
  15.   
  16.    <auth-constraint>   
  17.       <role-name>manager</role-name>   
  18.    </auth-constraint>   
  19.  </security-constraint>   
  20.  <security-role>  
  21.      <role-name>manager</role-name>  
  22.  </security-role>  

而使用CAS实现SSO之后,我们又不想容器保护去掉,该怎么办才能真正把这个CAS验证过的用户和角色传给Tomcat容器,而不至于重新登录,或者出现403错误呢? 
需求描述2: 在有EJB资源的时候,我们通常都会用JAAS来实现保护EJB资源,以限制EJB资源的访问。在调用EJB的时候,需要输入用户名和密码并且此用户具有相应的角色才能调用EJB。而在实现SSO之后,如果真正实现与EJB容器进行SSO呢? 


下面基于Tomcat容器实现需求1.
 
1. Tomcat窗口提供了一个叫Valve的接口,还提供一个基本实现ValveBase,我们解决方案就是基于实现一个自己的Valve, 在Valve里把经过CAS验证的用户传给Tomcat。以下就是自定义的Valve: 
Java代码  收藏代码
  1. package edu.extcas.valve;  
  2.   
  3. import java.io.*;  
  4. import java.security.Principal;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7.   
  8. import javax.servlet.*;  
  9. import javax.servlet.http.*;  
  10.   
  11. import org.apache.catalina.Container;  
  12. import org.apache.catalina.connector.Request;  
  13. import org.apache.catalina.connector.Response;  
  14. import org.apache.catalina.realm.GenericPrincipal;  
  15. import org.apache.catalina.valves.ValveBase;  
  16.   
  17. //import com.ttg.customagent.jboss.SimplePrincipal;  
  18.   
  19. public class ExtCASValve extends ValveBase {  
  20.     public final static String CAS_FILTER_USER = "edu.yale.its.tp.cas.client.filter.user";  
  21.   
  22.     public void setContainer(Container container) {  
  23.         super.setContainer(container);  
  24.     }  
  25.   
  26.     public void invoke(Request request, Response response) throws IOException,  
  27.             ServletException {  
  28.         HttpSession session = ((HttpServletRequest) request).getSession();  
  29.   
  30.         if (session != null) {  
  31.             String username = (String) session.getAttribute(CAS_FILTER_USER);  
  32.             if (null != username) {  
  33.                 List roleList = getRolesFromUserStore(username);  
  34.                 Principal principal = new GenericPrincipal(request.getContext()  
  35.                         .getRealm(), username, "", roleList);  
  36.                 request.setUserPrincipal(principal);  
  37.             }  
  38.   
  39.             //SecurityAssociation类是在登录EJB的时候使用的。  
  40.             //SecurityAssociation.setPrincipal(new SimplePrincipal(username.trim()));  
  41.             //SecurityAssociation.setCredential("password".trim().toCharArray());  
  42.               
  43.             getNext().invoke(request, response);  
  44.             return;  
  45.         } else {  
  46.             getNext().invoke(request, response);  
  47.             return;  
  48.         }  
  49.     }  
  50.   
  51.   //此方法是为在用户存储里取到相应的角色。自已根据实际情况实现  
  52.     private List getRolesFromUserStore(String username) {  
  53.         List roleList = new ArrayList();  
  54.         roleList.add("admin");  
  55.         roleList.add("manager");  
  56.         return roleList;  
  57.     }  
  58.   
  59. }  

2. 实现好自己的Valve,在server.xml里配置一下。然后就可以测试了。 


下面讲实现需求2实现的思路: 
1. 如果是EJB容器是JBoss,而Web容器是Tomcat, 也可以在Valve里用SecurityAssociation类(或者其他的方法)把CAS验证过的用户传到EJB容器里。这里同时需要传递密码。 
2. 要实现一个LoginModule, 类似以下代码: 
Java代码  收藏代码
  1. package edu.extcas.loginmodule;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.HashSet;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import java.util.Set;  
  9. import java.security.Principal;  
  10. import java.security.cert.X509Certificate;  
  11. import javax.security.auth.Subject;  
  12. import javax.security.auth.callback.Callback;  
  13. import javax.security.auth.callback.CallbackHandler;  
  14. import javax.security.auth.callback.NameCallback;  
  15. import javax.security.auth.callback.PasswordCallback;  
  16. import javax.security.auth.callback.UnsupportedCallbackException;  
  17. import javax.security.auth.login.LoginException;  
  18. import javax.security.auth.spi.LoginModule;  
  19. import org.apache.catalina.realm.GenericPrincipal;  
  20.   
  21. public class ExtCasLoginModule  implements LoginModule {  
  22.   
  23.     private CallbackHandler callbackHandler;  
  24.   
  25.     private Principal unauthenticatedIdentity;  
  26.   
  27.     private String userName = null;  
  28.   
  29.     private String password = null;  
  30.       
  31.     protected Subject subject;  
  32.       
  33.     protected boolean loginOk;  
  34.   
  35.     protected Principal identity;  
  36. font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; pad
    分享到:
    评论

相关推荐

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    搭建cas服务,cas与sqlserver连接,cas与security连接

    CAS(Central Authentication Service)是Java开发的一个开源身份验证框架,主要用于实现单点登录(Single Sign-On,SSO)。本教程将详细介绍如何搭建CAS服务,并将其与SQL Server数据库和Spring Security进行集成。...

    cas4.2.7 实现其他系统和cas互相认证互信

    3. **集成CAS客户端库**:在外部系统中,需要集成CAS客户端库,如Java CAS Client、Spring Security CAS等,它们负责处理与CAS服务器的交互,包括重定向用户到CAS登录页面、接收和验证服务票证。 4. **配置客户端...

    cas集成AD域

    CAS(Central Authentication Service)是Java开发的一个开源身份验证框架,主要功能是提供单点登录(Single Sign-On,SSO)服务。在企业环境中,尤其是在已部署了Active Directory(AD)域服务的情况下,将CAS与AD...

    cas 自定义登录页面

    CAS(Central Authentication Service)是一种广泛使用的开放源代码单点登录(Single Sign-On,SSO)框架,它允许用户通过一个中央认证服务访问多个应用系统,而无需为每个系统单独进行登录。在实际的企业环境中,...

    H3C CAS 3.0 云计算平台 【附CAS3.0产品培训PPT和安装使用指南】.rar

    H3C CAS 3.0版 H3C CAS 3.0产品培训胶片 H3C CAS-云计算管理平台技术白皮书V2.0 H3C CAS-云计算管理平台 安装指导-5W101-整本手册 H3C CAS-维护手册V2.0 H3C CAS-工程开局指导手册V2.0 H3C CAS-Rest API H3C ...

    cas-4.1.7最新

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统单独登录。CAS 4.1.7是该框架的一个特定版本,发布于...

    Cas5.2.6(cas-overlay-template-5.2.6)服务端

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在你提供的资料中,"Cas5.2.6(cas-overlay-template-5.2.6)服务端...

    iscas.rar_iscas_基准电路_逻辑综合

    本文将围绕"iscas.rar_iscas_基准电路_逻辑综合"这一主题,深入探讨这些概念及其在实际应用中的重要性。 iscas基准电路是一套广泛使用的标准测试集,由国际固态电路会议(International Solid-State Circuits ...

    cas修改登录页

    【标题】"CAS修改登录页"是一个针对中央认证服务(Central Authentication Service,简称CAS)的定制化实践。在单点登录(Single Sign-On,SSO)系统中,CAS扮演着核心角色,它提供了统一的身份验证服务,使得用户只...

    cas自定义登录页面

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在网络上验证用户身份。它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统分别进行登录。在你的场景...

    idea 中导入cas

    在IT行业中,Cas(Central Authentication Service)是一种广泛使用的开源身份验证和授权框架,它使得单点登录(Single Sign-On, SSO)变得简单。本文将详细介绍如何在IntelliJ IDEA(简称Idea)中导入和编译CAS项目...

    基于springboot,cas5.3,shiro,pac4j,rest接口获取ticket不再跳转cas server登录页

    本文将深入探讨如何利用Spring Boot、CAS 5.3、Shiro、Pac4J这四个强大的工具来构建一个高效且用户友好的REST接口,以获取CAS(Central Authentication Service)票据,避免用户被重定向到CAS服务器的登录页面。...

    cas-server-3.5.1和cas-client-3.2.1

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)系统,它允许用户通过一个认证入口访问多个应用系统,而无需在每个系统上分别进行登录。在这个压缩包中,...

    cas-server-3.4.10-release和cas-client-3.2.1-release两个

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在多应用环境中统一用户认证。这个协议由耶鲁大学开发并开源,现在由Apereo基金会维护。标题提到的"cas-server-...

    cas客户端jar包

    CAS(Central Authentication Service)是耶鲁大学开发的一种基于Web的单点登录(Single Sign-On,简称SSO)协议。在企业或机构的信息系统环境中,它允许用户通过一次登录即可访问多个应用系统,无需多次输入用户名...

    CAS 各种jar包

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。它允许用户通过单一的登录验证来访问多个应用系统,从而简化了用户的登录过程,...

    H3C CAS云计算软件套件《H3C CAS七日通》.rar

    《H3C CAS七日通》是一份针对H3C云计算软件套件——H3C Cloud Automation System (简称H3C CAS) 的详尽学习资料,旨在帮助用户在一周内快速掌握该系统的使用和管理。这份资料包含了有声讲解版,以音频形式辅助理解,...

    CAS restful接口调用

    ### CAS Restful接口调用详解 #### 一、CAS简介 CAS(Central Authentication Service)是一种开源的单点登录协议和服务实现。它旨在减轻单一Web应用的登录流程,并为多个服务提供一个集中式的认证机制。CAS支持...

    cas3.5.2单点登录文档详细配置

    3. 配置CAS Client,这可能涉及修改web.xml文件,引入CAS客户端库,并配置客户端的信任CAS Server的地址。 4. 可能需要修改CAS客户端的Java源代码,特别是对于证书验证的问题,可能需要重新编译并替换原有包。 5. ...

Global site tag (gtag.js) - Google Analytics