CAS返回用户的基本资料[基于数据库]

9月 25, 2016 |

相关的视频教程观看地址:单点登录系列视频教程
CAS3.0协议,添加了一个可选的cas:attributes 属性,用来返回用户的基本资料
设置步骤如下:

1、修改deployerConfigContext.xml

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="select email, phone_number from cas_user where {0} "/>
</bean>

<!--
<bean id="attributeRepository"
class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao"
p:backingMap-ref="attrRepoBackingMap" />
<util:map id="attrRepoBackingMap">
<entry key="uid" value="uid" />
<entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
<entry key="groupMembership" value="groupMembership" />
<entry>
<key><value>memberOf</value></key>
<list>
<value>faculty</value>
<value>staff</value>
<value>org</value>
</list>
</entry>
</util:map> -->
注释掉原来的attributeRepository bean, 声明SingleRowJdbcPersonAttributeDao的实例,官方默认的基于数据库的属性获取有两个实现类MultiRowJdbcPersonAttributeDao和SingleRowJdbcPersonAttributeDao,在此我们使用基于单行版本。

2、修改服务管理文件

本示例基于json管理服务注册
所以要在serviceName-serviceid.json文件中声明正确的attributeReleasePolicy 策略,
"attributeReleasePolicy" : {
"@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
},
ReturnAllAttributeReleasePolicy表示返回所有的属性。官方文档还有别的属性释放策略,参考附录的连接

3、客户端需要支持CAS协议3.0版本

在web.xml中声明org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter 而不是org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter。
在需要用户基本资料的地方,使用如下的代码片段获取基本资料
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
String email = (String)principal.getAttributes().get("email");
request是HttpServletRequest对象

参考信息

https://apereo.github.io/cas/4.2.x/integration/Attribute-Release.html

Posted in: MySQL practise

Comments are closed.