多服务集成CAS实现单点登录

简要概述实现步骤(思路):

1.创建web应用

2.集成CAS(使用CAS服务端内配置账户密码进行登录验证)

    2.1导入jar包

    2.2配置web.xml文件(拦截跳转验证以及验证结束返回)

3.配置CAS服务端使用数据库表进行登录验证(CAS本地服务搭建

    3.1修改CAS服务端配置文件

4.再创建多个web应用,实现真正的单点登录

    4.1同理步骤1、2,登录其中一个应用,其他应用便不用再登录


1.web应用

2.集成CAS(web.xml添加配置)

    注意:CAS服务端deployerConfigContext.xml文件这里要加入"http",因为这里web应用采用的是http,不加的话会报没权限使用CAS验证服务。

<util:list id="registeredServicesList">
        <bean class="org.jasig.cas.services.RegexRegisteredService"
              p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) protocols"
              p:serviceId="^(https?|imaps?|http?)://.*" p:evaluationOrder="10000001" />

    导入jar包:

<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.3.3</version>
  </dependency>

  <dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-core-authentication</artifactId>
    <version>4.2.7</version>
  </dependency>

     配置web.xml文件:

<!--cas相关开始-->

    <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
    <filter>
        <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>

    <!-- 登录校验分两步:1.用户名密码校验成功,返回ticket 2.再次请求CAS服务端验证ticket是否有效 -->
    <!-- 该过滤器负责用户的认证工作,必须启用它 -->
    <filter>
        <filter-name>CASFilter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://www.sso.com:8443/cas/login</param-value>
            <!--这里的server是服务端的IP,注意后面有/login -->
        </init-param>
        <init-param>
            <!--这里是集成CAS服务的服务地址,即登录校验后跳转的地址-->
            <param-name>serverName</param-name>
            <param-value>http://localhost:28081</param-value>
        </init-param>

        <!--忽略校验的地址,即配置不需要登录校验的请求-->
        <init-param>
            <param-name>ignorePattern</param-name>
            <param-value>/js/*|/img/*|/view/*|/css/*|/page/list</param-value>
        </init-param>

    </filter>
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
    <filter>

        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://www.sso.com:8443/cas</param-value>
            <!-- 该地址为校验ticket的地址,注意后面没有/login -->
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:28081</param-value>
            <!-- 校验成功后跳转的地址(CAS服务端那边) -->
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>
            org.jasig.cas.client.util.HttpServletRequestWrapperFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
    <filter>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--cas相关结束-->

到此第二步完成,启动应用访问 http://localhost:28081 发现集成成功,访问主页需要登录,默认账户密码:casuser --- Mellon

3.配置CAS服务端使用数据库表进行登录验证

    说明:

        认证对比方式为:先根据username查询数据库,返回password(已加密存储),加密登录页面传进来的password,对比这两个password是否相等。

 

    CAS服务端导入jar包:

        cas-server-support-jdbc-4.2.7.jar、cas-server-support-rest-4.2.7.jar、mysql-connector-java-5.1.45.jar

    配置deployerConfigContext.xml文件:

    注释掉原有的认证bean:

   

<!--查询数据所采用什么加密方式  认证方式:查询数据库-->
    <bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
        <property name="passwordEncoder" ref="MD5PasswordEncoder"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="sql" value="${cas.jdbc.authn.query.sql}"/>
    </bean>
	
	<!--配置加密算法 密码采用的加密方式-->
    <bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
        <constructor-arg  value="MD5"/>
    </bean>

	<!--名字叫dataSource的Bean取别名叫queryDatabaseDataSource-->
    <alias name="dataSource" alias="queryDatabaseDataSource"/>

	 <!--配置数据源-->
    <bean id="dataSource" 
            class="com.mchange.v2.c3p0.ComboPooledDataSource"
            p:driverClass="com.mysql.jdbc.Driver"
            p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"
            p:user="root"
            p:password="123456"
            p:initialPoolSize="6"
            p:minPoolSize="6"
            p:maxPoolSize="18"
            p:maxIdleTimeExcessConnections="120"
            p:checkoutTimeout="10000"
            p:acquireIncrement="6"
            p:acquireRetryAttempts="5"
            p:acquireRetryDelay="2000"
            p:idleConnectionTestPeriod="30"
            p:preferredTestQuery="select 1"/>
    <!--end  从数据库中的用户表中读取 -->

配置cas.properties文件,添加查询数据库sql语句:

# cas.jdbc.authn.query.sql=
cas.jdbc.authn.query.sql=select password from user where username=?

到此,配置完成。

验证:数据库存入 test1 --- 594f803b380a41396ed63dca39503542 登录页面输入test1 --- aaaaa

 

注:笔记使用

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值