CAS单点登录用户映射

本文介绍了如何在CAS 4.0.0版本中实现单点登录的用户映射,以解决不同系统间用户名称不一致的问题。通过在CAS服务器端建立系统映射表并配置attributeRepository,以及修改casServiceValidationSuccess.jsp,确保认证成功后返回对应系统的正确用户名,从而实现用户在各系统间的平滑切换。
摘要由CSDN通过智能技术生成

由于使用CAS做单点登录要集成以前的系统,现在遇到一个问题:cas认证所使用的用户表为casuser,cas集成的A系统使用的用户表是sysuserA,集成的B系统使用的用户表是sysuserB,假如小明在casuser中的用户名为123456,在系统A中用户名为xiaoming,在系统B中的用户名是1234,基于这种情况,当小明想要访问A系统,进入cas server认证中心认证输入用户名123456和密码后认证成功跳转A系统后,系统A中记录的应该是xiaoming的用户信息,同理在访问B系统时应该不需要输入用户名密码直接进入系统B,并且在系统B中应该是1234的信息。这就需要做用户映射了。

思路一:在cas集成每个系统时在该系统中做用户映射,在cas端认证成功后返回用户名,然后在该系统的用户映射表中查询对应的用户名,进而访问系统受限资源,但这样在cas中增加一个用户需要维护每个用户映射表。

思路二:在cas server端做用户映射,这样只需要维护一个映射表即可

实现前提是cas server已经改造为通过数据库验证,cas server版本:4.0.0

下面根据思路二来进行做用户映射,建立一个系统映射表,表结构如下,其中USERNAME和SYSTEM作为主键,USERNAME为单点认证的用户名,SYSTEM为cas集成的各个系统的名字,LOCALACCOUNT为系统所对应的用户名

当通过单点登录访问某个系统时,将123456所对应的各系统的用户名返回给该系统,由该系统判断123456这个用户在该系统中所对应的用户名是哪个,然后进行受限资源访问。下面记录下具体步骤

1.首先需要配置属性attributeRepository

在WEB-INF中找到deployerConfigContext.xml文件,重新改写attributeRepository的bean

<!-- 修改前
<bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao"
        p:backingMap-ref="attrRepoBackingMap" />

<util:map id="attrRepoBackingMap">
    <entry key="uid" value="uid" />
    <entry key="eduPersonAffiliation" value="eduPersonAffiliation" /> 
    <entry key="groupMembership" value="groupMembership" />
</util:map> 
-->

<!-- 用户映射 -->
<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.MultiRowJdbcPersonAttributeDao">
    <constructor-arg index="0" ref="dataSource" />
    <constructor-arg index="1" value="SELECT * FROM user_mapping WHERE {0}" />  <!-- user_mapping为映射表的表名 -->
    <property name="nameValueColumnMappings">
         <!-- key为映射表中第二列字段名,value为映射表第三列字段名 -->
        <map>
            <entry key="SYSTEM" value="LOCALACCOUNT" />
        </map>
    </property>
    <property name="queryAttributeMapping">
        <map>
            <entry key="username" value="username" />
        </map>
    </property>
    <property name="resultAttributeMapping">
        <!-- key为映射表中system字段的值,value为提供给客户端获取的属性名字,系统会自动填充值 -->
        <map>
            <entry key="systemA" value="systemA" />
            <entry key="systemB" value="systemB" />
            <entry key="systemC" value="systemC" />
        </map>
    </property>
</bean>
   <!-- 用户映射 -->

2.修改casServiceValidationSuccess.jsp

WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp.在server验证成功后,这个页面负责生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信息,因此需要对页面进行扩展。<!-- add -->部分为扩展部分

<%@ page session="false" contentType="application/xml; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值