`
duan1823a
  • 浏览: 90889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
扩展 CAS Server 界面

CAS 提供了 2 套默认的页面,分别为“ default ”和“ simple ”,分别在目录“ cas/WEB-INF/view/jsp/default ”和“ cas/WEB-INF/view/jsp/simple ”下。其中 default 是一个稍微复杂一些的页面,使用 CSS,而 simple 则是能让 CAS 正常工作的最简化的页面。

在 部署 CAS 之前,我们可能需要定制一套新的 CAS Server 页面,添加一些个性化的内容。最简单的方法就是拷贝一份 default 或 simple 文件到“ cas/WEB-INF/view/jsp ”目录下,比如命名为 newUI,接下来是实现和修改必要的页面,有 4 个页面是必须的:

casConfirmView.jsp: 当用户选择了“ warn ”时会看到的确认界面
casGenericSuccess.jsp: 在用户成功通过认证而没有目的Service时会看到的界面
casLoginView.jsp: 当需要用户提供认证信息时会出现的界面
casLogoutView.jsp: 当用户结束 CAS 单点登录系统会话时出现的界面
CAS 的页面采用 Spring 框架编写,对于不熟悉 Spring 的使用者,在修改之前需要熟悉该框架。

页 面定制完过后,还需要做一些配置从而让 CAS 找到新的页面,拷贝“ cas/WEB-INF/classes/default_views.properties ”,重命名为“ cas/WEB-INF/classes/ newUI_views.properties ”,并修改其中所有的值到相应新页面。最后是更新“ cas/WEB-INF/cas-servlet.xml ”文件中的 viewResolver,将其修改为如清单 9 中的内容。


清单 9. 指定 CAS 页面

<bean id="viewResolver"
     class="org.springframework.web.servlet.view.ResourceBundleViewResolver" p:order="0">
    <property name="basenames">
        <list>
            <value>${cas.viewResolver.basename}</value>
            <value> newUI_views</value>
        </list>
    </property>
</bean>


部署客户端应用

单 点登录的目的是为了让多个相关联的应用使用相同的登录过程,本文在讲解过程中构造 2个简单的应用,分别以 casTest1 和 casTest2 来作为示例,它们均只有一个页面,显示欢迎信息和当前登录用户名。这 2 个应用使用同一套登录信息,并且只有登录过的用户才能访问,通过本文的配置,实现单点登录,即只需登录一次就可以访问这两个应用。

与 CAS Server 建立信任关系

假设 CAS Server 单独部署在一台机器 A,而客户端应用部署在机器 B 上,由于客户端应用与 CAS Server 的通信采用 SSL,因此,需要在 A 与 B 的 JRE 之间建立信任关系。

首先与 A 机器一样,要生成 B 机器上的证书,配置 Tomcat 的 SSL 协议。其次,下载http://blogs.sun.com/andreas/entry/no_more_unable_to_find 的 InstallCert.java,这个文件下来后是源代码,还需执行“javac InstallCert.java”,生成InsallCert.class,InstallCert$SavingTrustManager.class这两个文件,然后运行“ java InstallCert compA:8443 ”命令,并且在接下来出现的询问中输入 1。这样,就将 A 添加到了 B 的 trust store 中。如果多个客户端应用分别部署在不同机器上,那么每个机器都需要与 CAS Server 所在机器建立信任关系。

配置 CAS Filter

准 备好应用 casTest1 和 casTest2 过后,分别部署在 B 和 C 机器上,由于 casTest1 和casTest2,B 和 C 完全等同,我们以 casTest1 在 B 机器上的配置做介绍,假设 A 和 B 的域名分别为 domainA 和 domainB。

将 cas-client-java-2.1.1.zip 改名为 cas-client-java-2.1.1.jar 并拷贝到 casTest1/WEB-INF/lib目录下,修改 web.xml 文件,添加 CAS Filter,如清单 10 所示:


清单 10. 添加 CAS Filter

<web-app>
  ...
  <filter>
    <filter-name>CAS Filter</filter-name>
    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
      <param-value>https://domainA:8443/cas/login</param-value>
    </init-param>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
      <param-value>https://domainA:8443/cas/serviceValidate</param-value>
    </init-param>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
      <param-value>domainB:8080</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CAS Filter</filter-name>
    <url-pattern>/protected-pattern/*</url-pattern>
  </filter-mapping>
  ...
</web-app>

对于所有访问满足 casTest1/protected-pattern/ 路径的资源时,都要求到 CAS Server 登录,如果需要整个 casTest1 均受保护,可以将 url-pattern 指定为“/*”。

从清单 10 可以看到,我们可以为 CASFilter 指定一些参数,并且有些是必须的,表格 1 和表格 2 中分别是必需和可选的参数:


表格 1. CASFilter 必需的参数
参数名 作用
edu.yale.its.tp.cas.client.filter.loginUrl 指定 CAS 提供登录页面的 URL
edu.yale.its.tp.cas.client.filter.validateUrl 指定 CAS 提供 service ticket 或 proxy ticket 验证服务的 URL
edu.yale.its.tp.cas.client.filter.serverName 指定客户端的域名和端口,是指客户端应用所在机器而不是 CAS Server 所在机器,该参数或 serviceUrl 至少有一个必须指定
edu.yale.its.tp.cas.client.filter.serviceUrl 该参数指定过后将覆盖 serverName 参数,成为登录成功过后重定向的目的地址

表格 2. CASFilter 可选参数
参数名 作用
edu.yale.its.tp.cas.client.filter.proxyCallbackUrl 用于当前应用需要作为其他服务的代理(proxy)时获取 Proxy Granting Ticket 的地址
edu.yale.its.tp.cas.client.filter.authorizedProxy 用 于允许当前应用从代理处获取 proxy tickets,该参数接受以空格分隔开的多个 proxy URLs,但实际使用只需要一个成功即可。当指定该参数过后,需要修改 validateUrl 到 proxyValidate,而不再是 serviceValidate
edu.yale.its.tp.cas.client.filter.renew 如果指定为 true,那么受保护的资源每次被访问时均要求用户重新进行验证,而不管之前是否已经通过
edu.yale.its.tp.cas.client.filter.wrapRequest 如果指定为 true,那么 CASFilter 将重新包装 HttpRequest,并且使 getRemoteUser() 方法返回当前登录用户的用户名
edu.yale.its.tp.cas.client.filter.gateway 指定 gateway 属性
传递登录用户名

CAS 在登录成功过后,会给浏览器回传 Cookie,设置新的到的 Service Ticket。但客户端应用拥有各自的 Session,我们要怎么在各个应用中获取当前登录用户的用户名呢?CAS Client 的 Filter 已经做好了处理,在登录成功后,就可以直接从 Session 的属性中获取,如清单 11 所示:


清单 11. 在 Java 中通过 Session 获取登录用户名

// 以下两者都可以
session.getAttribute(CASFilter.CAS_FILTER_USER);
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");

在 JSTL 中获取用户名的方法如清单 12 所示:


清单 12. 通过 JSTL 获取登录用户名

<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>

另 外,CAS 提供了一个 CASFilterRequestWrapper 类,该类继承自HttpServletRequestWrapper,主要是重写了 getRemoteUser() 方法,只要在前面配置 CASFilter 的时候为其设置“ edu.yale.its.tp.cas.client.filter.wrapRequest ”参数为 true,就可以通过 getRemoteUser() 方法来获取登录用户名,具体方法如清单 13 所示:


清单 13. 通过 CASFilterRequestWrapper 获取登录用户名

CASFilterRequestWrapper  reqWrapper=new CASFilterRequestWrapper(request);
out.println("The logon user:" + reqWrapper.getRemoteUser());

效果

在 casTest1 和 casTest2 中,都有一个简单 Servlet 作为欢迎页面 WelcomPage,且该页面必须登录过后才能访问,页面代码如清单 14 所示:


清单 14. WelcomePage 页面代码

public class WelcomePage extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException
  {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Welcome to casTest2 sample System!</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Welcome to casTest1 sample System!</h1>");
    CASFilterRequestWrapper  reqWrapper=new CASFilterRequestWrapper(request);
    out.println("<p>The logon user:" + reqWrapper.getRemoteUser() + "</p>");
    HttpSession session=request.getSession();
    out.println("<p>The logon user:" +
                   session.getAttribute(CASFilter.CAS_FILTER_USER)  + "</p>");
    out.println("<p>The logon user:" +
         session.getAttribute("edu.yale.its.tp.cas.client.filter.user") + "</p>");
    out.println("</body>");
    out.println("</html>");
    }
}

在上面所有配置结束过后,分别在 A, B, C上启动 cas, casTest1 和 casTest2,按照下面步骤来访问 casTest1 和 casTest2:

打开浏览器,访问 http://domainB:8080/casTest1/WelcomePage ,浏览器会弹出安全提示,接受后即转到 CAS 的登录页面,如图所示:



登录成功后,再重定向到 casTest1 的 WelcomePage 页面,如图 所示:


可以看到图 中地址栏里的地址多出了一个 ticket 参数,这就是 CAS 分配给当前应用的 ST(Service Ticket)。

再在同一个浏览器的地址栏中输入 http://domainC:8080/casTest2/WelcomePage ,系统不再提示用户登录,而直接出现如图 4 所示的页面,并且显示在 casTest1 中已经登录过的用户。


重新打开一个浏览器窗口,先输入 http://domainC:8080/casTest2/WelcomePage ,系统要求登录,在登录成功过后,正确显示 casTest2 的页面。之后再在地址栏重新输入 http://domainB:8080/casTest1/WelcomePage ,会直接显示 casTest1 的页面而无需再次登录。
分享到:
评论

相关推荐

    CAS SSO配置文档详解

    ### CAS SSO配置文档详解 #### 一、SSO实现原理与CAS的作用 单点登录(Single Sign-On,简称SSO)是一种用户身份验证机制,允许用户在一个安全领域内访问多个应用系统,而无需多次输入身份验证信息。在税务行业...

    单点登录cas的配置过程

    注意保存好这个证书别名,因为后续配置会用到。 - 创建一个名为`keys`的文件夹于`D:`盘下,用于存放生成的证书文件。 - 需要在`C:\Windows\system32\drivers\etc\hosts`文件中添加服务器的域名并映射到本机IP地址...

    CAS原理和配置过程

    下面将详细介绍CAS的工作原理、核心概念以及配置流程。 #### 一、CAS工作原理 CAS的核心机制基于以下三个概念: - **TGT (Ticket-Granting Ticket)**:由CAS服务器端产生的授权令牌,用于后续服务间的验证。 - **...

    CAS单点登录配置步骤说明书

    ### CAS单点登录配置步骤详解 #### 一、配置SSL **1.1 生成证书** 首先,为了确保数据传输的安全性,我们需要配置SSL。在配置SSL的过程中,第一步是生成证书。这一步骤可以通过Java提供的`keytool.exe`工具来完成...

    Exchange Server 2010 安装及CAS服务器配置

    ### Exchange Server 2010 安装及CAS服务器配置 #### 一、Exchange Server 2010 安装前的准备工作 在正式安装Exchange Server 2010之前,需要确保网络环境符合一定的...这为后续更高级的功能配置奠定了坚实的基础。

    使用CAS在Tomcat中实现单点登录参考代码及配置

    - **配置CASClient**:为了使Web应用能够与CASServer进行交互,需要在应用中添加CASClient的依赖,并配置其与CASServer的连接信息。 - **Filter配置**:CASClient通常通过Filter的形式集成到Web应用中。这意味着每次...

    CAS单点登录HTTP协议版本配置指南

    本配置指南涉及的CAS版本如下: - **服务端**:cas-server-3.4.7 - **客户端**:cas-client-3.2.0 对于服务端而言,仅需解压`cas-server-webapp-3.4.7.war`文件即可,无需额外的源代码。客户端方面,主要使用的组件...

    CAS单点登陆配置手册

    ### CAS单点登录配置手册详解 #### 一、Yale CAS 概述 CAS (Central Authentication Service) 是由美国耶鲁大学发起的一项开源项目,它致力于为Web应用系统提供可靠且安全的单点登录(Single Sign-On, SSO)解决...

    cas配置详解

    TGT(Ticket Granting Ticket)是CAS为成功验证的用户提供的一次性凭证,用于后续的SSO请求。ST(Service Ticket)是基于TGT生成的,用于向特定的服务提供认证信息。票证的生命周期、安全性和缓存策略都在配置中设定...

    cas 配置

    - 接下来需要为CAS客户端生成相应的密钥库文件,这部分内容将在后续章节中详细介绍。 #### 总结 通过上述步骤,我们已经完成了CAS服务端的基本配置,包括生成服务器密钥文件、服务端证书文件以及配置Tomcat支持...

    CAS之SSO配置手册.docx

    整个过程中,通信通过SSL协议保证安全,用户只需参与首次登录,后续访问由CAS Client与Server之间的交互完成,透明化用户体验。 3. CAS服务端配置 配置CAS Server主要包括以下步骤: 1)环境准备:确保JDK 1.6及...

    SpringBoot+Security+Cas

    然后在Spring Boot应用中,需要添加对CAS客户端库的依赖,并创建一个CAS配置类,用于设置CAS服务器的URL、服务验证URL等参数。通过`CasAuthenticationProvider`,Spring Security可以与CAS服务器通信,进行用户的...

    cas java cas java 实例

    - TGT:用户首次登录时,CAS服务器生成的会话票据,存储在用户的浏览器中,用于后续的单点登出(Single Sign-Out, SSO)和二次认证。 2. CAS工作原理: - 用户尝试访问受保护的服务。 - 服务将用户重定向到CAS...

    CAS服务器新增硬盘配置案例.docx编程资料

    ### CAS服务器新增硬盘配置案例详解 #### 背景介绍 在现代企业的IT环境中,随着业务量的增长,服务器资源的需求也随之增加。对于采用H3C CAS(CloudServer Operating System)虚拟化平台的企业而言,当遇到CVK...

    cas客户端jar包

    4. **Ticket Granting Ticket (TGT)**:用户首次登录时,CAS服务器生成的全局认证票证,可用于获取后续的服务票证。 5. **Service Ticket (ST)**:针对特定服务的票证,由TGT换取,用于证明用户已通过CAS服务器的...

    cas client springmvc(springmvc cas maven sso 详解 )

    - 配置Web.xml:在Web应用的配置文件中,我们需要配置CAS过滤器链,包括`CasAuthenticationFilter`、`TicketValidationFilter`和`CasHttpServletRequestWrapperFilter`,这些过滤器负责拦截请求、验证票据并创建...

    Acegi Security整合CAS实例

    若无异常,表明SSL配置正确,为后续的CAS Server与Acegi Security整合提供了必要的环境。 #### 配置CAS Server的用户认证 重新配置CAS Server的用户认证部分,主要是修改`deployerConfigContext.xml`文件,增加...

    CAS入门测试

    2. TGT:Ticket Granting Ticket是CAS服务器为用户成功验证后生成的一次性票据,用户后续访问其他受保护的应用时,只需提供这个TGT,而无需再次输入凭证。 3. 服务验证:当用户尝试访问一个受CAS保护的应用时,应用...

    cas-proxy认证

    ### CAS-Proxy 认证详解 #### 一、概述 CAS (Central Authentication Service) 是一...通过对 CAS-Proxy 认证的基本原理、配置方法以及实践案例的深入理解,可以帮助开发者更好地设计和实现基于 CAS 的单点登录系统。

Global site tag (gtag.js) - Google Analytics