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

zjuwangleicn 2011-03-06

紧接上一篇CAS配置第一步:准备工作

CASJava群35271653

1:加入数据库验证

再将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诠释的非常清楚,不再解释。

2:让CAS返回更多用户信息XML修改

然后找到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中的参数解释如下:

<entrykey="id"value="UserId"/>

key代表的是你数据库中的字段,Value是客户端通过AttributePrincipal获取时的参数

3:CAS登录获取更多用户信息的JSP修改

仅仅是修改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>

注意:

1.在casServiceValidationSuccess.jsp中加入我们的代码的时候

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

这里千万不能有空格!

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

相关推荐

xusong / 0评论 2012-05-29