• CAS 单点登录【1】入门


    1. CAS 的引入的前提和好处

       很早期的公司,一家公司可能只有一个应用,慢慢的应用开始变多,如员工报销系统、审核系统、学习系统......

       每个应用都要进行注册登录,退出的时候又要一个个退出,用户操作起来确实有点崩溃。

       我们想要另一种登录体验,公司里面的应用只要一次注册,登录的时候只要一次登录,退出的时候只要一次退出,这样就完美了。

       CAS 算是最普遍、最通用的单点解决方案,但如果自家公司大牛云集,也不妨依据公司业务自己造轮子。

       JA-SIG CAS(Central Authentication Service)为 Web 应用系统提供了单点登录服务。它的特性包括:

       一个开放和具有很好文档支持的协议;

       一个Java开源服务器组件;

       提供多种类型的客户端包括 Java、.Net、PHP、Perl、Apache、uPortal等;

       能够与uPortal、BlueSocket、TikiWiki、 Mule、 Liferay、Moodle集成使用。

       从 github 下载源码进行编译打包即可得到服务端 war,官网地址:https://www.apereo.org/projects/cas

       此篇博客算是 CAS 简单入门,去掉了复杂的 HTTPS 协议、采用默认的 CAS 服务端检验方法和凭证,目的是新手能快速搭建单点环境。

       在实际项目中使用时,肯定会做很多个性化的定制,如单点登陆页面、服务端用户的校验方式、会话中存储的用户对象结构等等。

    2. 取消 HTTPS 协议配置的方法

       由于 CAS 默认是基于 HTTPS 协议,所以需要配置服务端的 tomcat,使之支持SSL安全协议访问。

       但对于初次体验的人来说,还是建议取消 CAS 默认的 HTTPS 协议,能节省很多的麻烦和配置过程。

       需要进行修改的配置文件:

    WEB-INF/deployerConfigContext.xml
    
    < bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" />
    
    增加参数 p:requireSecure="false",是否需要安全验证即 HTTPS,false为不采用 如下:
    
    < bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" p:requireSecure= "false" />
    WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml 
             
    修改 p:cookieSecure="true" 为 p:cookieSecure="false",即不需要安全 cookie 如下:
    < bean id = "ticketGrantingTicketCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1" p:cookieName = "CASTGC" p:cookiePath = "/cas" />
    WEB-INFspring-configurationwarnCookieGenerator.xml
    
    修改 p:cookieSecure="true" 为 p:cookieSecure="false",即不需要安全 cookie 如下:
    
    < bean id = "warnCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1"  p:cookieName = "CASPRIVACY"  p:cookiePath = "/cas" />

    3. 服务端的搭建

       从 github clone 下来的源码进行编译和打包,然后将对应的 war 包放入 tomcat webapp 下启动 tomcat。

       

        服务端默认采用的是静态账号和密码的验证方式,WEB-INF/deployerConfigContext.xml 如下。

      <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
            <property name="users">
                <map>
                    <entry key="casuser" value="Mellon"/>
                </map>
            </property>
        </bean>

       这里当然可以自定义校验类(必改的地方),可以通过数据库账号密码、特殊的业务逻辑等等,只要符合 CAS 的返回值即可。

       <bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
            <constructor-arg>
                <map>
                    <!--
                       | IMPORTANT
                       | Every handler requires a unique name.
                       | If more than one instance of the same handler class is configured, you must explicitly
                       | set its name to something other than its default name (typically the simple class name).
                       -->
                    <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
                    <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
                </map>
            </constructor-arg>

    4. 多应用的集成和使用

       服务端搭建起来后,其他应用只需要简单的几部配置就可以轻松通过 CAS 单点进行用户的验证。

       依赖对应的客户端 jar :

    <dependency>
        <groupId>org.jasig.cas.client</groupId>
        <artifactId>cas-client-core</artifactId>
        <version>${cas.client.version}</version>
    </dependency>

       配置 web.xml 如下: 

        <listener>
            <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
        </listener>
    
        <filter>
            <description>该过滤器用于实现单点登出功能,需放在所有单点过滤器前面</description>
            <filter-name>CAS Single Sign Out Filter</filter-name>
            <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>CAS Single Sign Out Filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <filter>
            <description>核心单点过滤器</description>
            <filter-name>CAS Filter</filter-name>
            <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
            <init-param>
                <param-name>casServerLoginUrl</param-name>
                <param-value>http://127.0.0.1:8080/cas</param-value>
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>http://127.0.0.1:8081/</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CAS Filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <filter>
            <description>该过滤器负责对Ticket的校验工作,必须启用它</description>
            <filter-name>CAS Validation Filter</filter-name>
            <filter-class>
                org.jasig.cas.client.validation.Cas10TicketValidationFilter
            </filter-class>
            <init-param>
                <param-name>casServerUrlPrefix</param-name>
                <param-value>http://127.0.0.1:8080/cas</param-value>
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>http://127.0.0.1:8081/</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CAS Validation Filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

       到此,整个单点服务端和应用端的使用都已描述如上,已亲测可用。

  • 相关阅读:
    javaSE基础知识
    oracle错误分析:ora-04063:view view_test has errors
    爬虫—01-爬虫原理与数据抓取
    Web—13-判断网站请求来自手机还是pc浏览器
    Web—12-详解CSS的相对定位和绝对定位
    Web—11-手机端页面适配
    Web—10-前端性能优化
    Web—09-正则表达式
    知识储备—01-进程,线程,多线程相关总结
    Web—08-移动端库和框架
  • 原文地址:https://www.cnblogs.com/java-class/p/7762872.html
Copyright © 2020-2023  润新知