`
gaoyuntao2005
  • 浏览: 303019 次
  • 性别: 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
    分享到:
    评论

相关推荐

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

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。 请看博客...

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

    本人亲自试验的cas单点登录配置,服务端用cas-server-3.5.2,客户端用cas-client-3.2.1,里边详细描述了具体每一步的配置过程及遇到的问题及异常,相信你也会碰到的,cas-client-3.2.1中需要修改一个java类的源代码...

    cas-overlay-template-6.4 服务端代码

    1.CAS-集成mysql 2.CAS-日志审计 3.CAS-连接池配置 4.CAS-自定义错误信息 5.CAS-识别json文件 6.CAS-页面缓存记住我 7.CAS-cookie设置 8.CAS-tgc设置 9.CAS-登出 10.CAS-redisCluster集群存储ticket(相应redis必须...

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    内含本人实例精华,一个自做PPT,动画解析cas协议,四个客户端client程序实例,一个server端程序,N个文档以及所有xml文件。配套讲解博客地址: [置顶] SSO单点登录系列3:cas-server端配置认证方式实践(数据源+...

    cas4.1.x集成 cas4.1.x集成

    cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x...

    CAS RESTful API 开发文档

    n cas-server-3.4.2\modules\cas-server-support-jdbc-3.4.2.jar 、 cas-server-integration-restlet-3.4.2.jar 拷贝到 D:\server\apache-tomcat-6.0.18\webapps\cas\WEB-INF\lib 目录下。 n 数据库驱动 jar 拷贝...

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    解压后打开cas-server-3.3.1-release\cas-server-3.3.1\modules ,将cas-server-webapp-3.3.1.war 重命名为cas.war,并将war包拷贝到tomcat5.5以上版本的webapps目录下(在此对server jdbc支持不做详细解读,测试...

    java-cas单点登录服务端

    CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,研究如何采用 CAS 实现轻量级单点登录解决方案。 CAS 是 Yale 大学发起的...

    CAS 协议 票据、url介绍,包括cas1.0和cas2.0

    CAS协议,包括cas1.0和cas2.0的协议,cas 协议分为两部分,一部分是票据-ticket,一部分是url。

    单点登录sso-shiro-cas-maven

    # sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库...

    CAS客户端JAR包版本3.3.3

    CAS客户端JAR包版本3.3.3下载之后拷贝到lib文件夹下 配置web.xml &lt;!--退出--&gt; &lt;param-name&gt;casServerLogoutUrl &lt;param-value&gt;http://192.168.156.120:8080/cas/logout&lt;/param-value&gt;&lt;!--server cas ...

    H3C CAS云计算最佳实践和配置指导手册汇总集.rar

    01 H3C CAS 云迁移方案最佳实践 02 H3C CAS-云容器引擎配置指导 03 H3C CAS 虚拟机快照配置指导 04 H3C CAS-虚拟机防病毒配置指导 05 H3C CAS SR-IOV配置指导 06 H3C CAS vGPU热迁移配置指导 07 H3C CAS 内存...

    cas-server-webapp-4.0.0单点登录(带超详细文档、数据连接jar包、c3p0)可运行

    单点登录 sso cas带超详细文档,包含(cas-server-webapp-4.0.0.war、c3p0-0.9.1.2.jar、cas-client-core-3.3.3.jar、cas-server-support-jdbc-4.0.0.jar、cas-server-webapp-support-4.0.0.jar、commons-logging-...

    cas.zip--cas源码

    cas源码,可直接使用 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS 是 Yale ...

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

    包含cas源码、cas使用说明文档(包含配置信息)、连接数据库所需jar包、cas服务端自定义返回值等

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

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

    CAS-SERVER.zip

    CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特点: 【1】开源的企业级单点登录解决方案。 【2】CAS ...

    cas server端war包 cas6.3+jdbc版本

    cas6.3版本 tomcat环境准备好,mysql设置成application.properties中提示,thekeystore自己生成放入tomcat并需要在jdk中导入证书

    CAS源码分析图

    CAS源码分析图,

Global site tag (gtag.js) - Google Analytics