CAS配置第二步:服务器端的配置

紧接上一篇[url=http://andy-ghg.iteye.com/blog/942595]CAS配置第一步:准备工作[/url]

[size=large][b]CAS Java 群35271653[/b][/size]
[b][size=medium]1:加入数据库验证[/size][/b]

再将cas.war部署到tomcat-cas-server下之后,
将oracle数据库驱动加入到cas工程的lib下
打开目录X:\tomcat-cas-server\webapps\cas\WEB-INF下的deployerConfigContext.xml修改里面的内容,注释掉以下代码:

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"


这段代码CAS默认的验证方式,就是用户名和密码相同即可通过认证,我们现在做的时候加入数据库验证,就是用户名密码来自数据库。

在相同的位置上加入如下代码:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select pwd from portal_user where id=? and sessionid is null" />
<property name="dataSource" ref="dataSource" />
</bean>

其中,sql语句可以自定义成你想要的结果,例如:

select password from tablename where username=?

然后在根节点<beans>下加入节点如下:

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@xxxxxxxxxxxxx:1521:pisdb</value>
</property>
<property name="username">
<value>pis</value>
</property>
<property name="password">
<value>pis</value>
</property>
</bean>

里面的参数配置,XML诠释的非常清楚,不再解释。

[b][size=medium]2:让CAS返回更多用户信息XML修改[/size][/b]
然后找到serviceRegistryDao这个节点,将里面的内容全部注释掉:

<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<!--<property name="registeredServices">
<list>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="0" />
<property name="name" value="HTTP" />
<property name="description" value="Only Allows HTTP Urls" />
<property name="serviceId" value="http://**" />
</bean>

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="1" />
<property name="name" value="HTTPS" />
<property name="description" value="Only Allows HTTPS Urls" />
<property name="serviceId" value="https://**" />
</bean>

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="2" />
<property name="name" value="IMAPS" />
<property name="description" value="Only Allows HTTPS Urls" />
<property name="serviceId" value="imaps://**" />
</bean>

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="3" />
<property name="name" value="IMAP" />
<property name="description" value="Only Allows IMAP Urls" />
<property name="serviceId" value="imap://**" />
</bean>
</list>
</property>-->
</bean>

此节点的作用为:如果你在<list>中加入了bean,并设定了serviceId的value,那么通过CAS你只能访问这个url地址,其他的url地址将不能访问,**代表的意思就是指该协议下所有的都允许被访问。但是在实际操作中,加入如果不注释掉里面的内容,将会在客户端无法获取到用户更多的登录信息。

然后在配置文件的根节点(<beans>)下加入以下XML配置:

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="select * from portal_user where {0}" />
<property name="queryAttributeMapping">
<map>
<entry key="username" value="id" />
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="id" value="UserId"/>

<entry key="sessionid" value="UserName"/>
<entry key="uclass" value="UserClass"/>
</map>
</property>
</bean>

其中的sql语句可以根据自己的情况来写。下面resultAttributeMapping中的参数解释如下:
<entry key="id" value="UserId"/>
key代表的是你数据库中的字段,Value是客户端通过 AttributePrincipal获取时的参数

[b][size=medium]3:CAS登录获取更多用户信息的JSP修改[/size][/b]
仅仅是修改xml是不够的,你必须修改他的casServiceValidationSuccess.jsp,路径为:
X:\tomcat-cas-server\webapps\cas\WEB-INF\view\jsp\protocol\2.0
在其中紧接着加入以下代码:


<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
<cas:attributes>
<c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:attribute>
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</cas:attribute>
</c:forEach>
</cas:attributes>
</c:if>


[b][size=medium]注意:[/size][/b]
1.在casServiceValidationSuccess.jsp中加入我们的代码的时候

<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>

这里千万不能有空格!


2.在attributeRepository这个节点中,resultAttributeMapping下的配置,例如<entry key="id" value="UserId"/>在配置的时候需要注意数据库中存放的不能是中文(不过理论上可以解决,具体原因就是casServiceValidationSuccess.jsp在拼接XML的时候出现乱码。)有兴趣的可以尝试解决一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值