CAS 4.0.0:如何在serviceValidate接口GET响应中返回额外属性与参数
嘿,针对CAS 4.0.0版本要在serviceValidate的GET响应里返回额外用户属性的需求,我给你梳理了具体的配置步骤,跟着做就能达到预期效果:
1. 配置用户属性来源
首先得让CAS能获取到你要返回的属性(比如email、firstname这些),这里分两种常见场景:
场景1:内存测试用属性(快速验证)
找到CAS部署目录下的WEB-INF/deployerConfigContext.xml文件,添加以下bean配置,直接在内存中定义用户属性:
<!-- 定义属性仓库 --> <bean id="attributeRepository" class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao"> <property name="backingMap"> <map> <!-- 关联用户名casuser到对应的属性集合 --> <entry key="casuser" value-ref="casuserAttributes"/> </map> </property> </bean> <!-- casuser的具体属性 --> <util:map id="casuserAttributes"> <entry key="email" value="test@gmail.com"/> <entry key="firstname" value="First name"/> <entry key="lastname" value="Lastname"/> </util:map>
场景2:从数据库获取属性(生产环境常用)
如果你的用户属性存在数据库里,就用JDBC属性仓库替换上面的配置,同样在deployerConfigContext.xml里添加:
<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"> <!-- 传入数据库数据源(你需要先配置好dataSource bean) --> <constructor-arg ref="dataSource"/> <!-- 查询属性的SQL语句,?会被用户名替换 --> <constructor-arg value="SELECT email, firstname, lastname FROM users WHERE username = ?"/> <property name="usernameAttributeName" value="username"/> <property name="queryAttributeMapping"> <map> <entry key="username" value="username"/> </map> </property> </bean>
2. 配置CAS在serviceValidate响应中输出属性
接下来要告诉CAS,把获取到的属性渲染到响应里。找到WEB-INF/cas-servlet.xml文件,定位到serviceValidationSuccessView这个bean,添加renderedAttributes属性,指定要输出的属性名:
<bean id="serviceValidationSuccessView" class="org.jasig.cas.web.view.ServiceValidationSuccessView"> <property name="modelAttribute" value="assertion"/> <!-- 这里列出你要返回的属性 --> <property name="renderedAttributes"> <list> <value>email</value> <value>firstname</value> <value>lastname</value> </list> </property> <property name="successResponse" value="/WEB-INF/view/jsp/protocol/3.0/casServiceValidationSuccess.jsp"/> </bean>
3. 关联属性到认证主体
最后要确保属性仓库的属性被正确注入到认证后的主体信息里。回到deployerConfigContext.xml,找到authenticationManager的配置,添加属性填充器:
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"> <constructor-arg> <map> <!-- 这里是你的认证处理器(比如JDBC、JAAS等,保持原有配置即可) --> <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver"/> </map> </constructor-arg> <property name="authenticationMetaDataPopulators"> <list> <!-- 把属性仓库的属性填充到认证主体 --> <bean class="org.jasig.cas.authentication.principal.DefaultPrincipalAttributesRepositoryMetaDataPopulator"> <constructor-arg ref="attributeRepository"/> </bean> </list> </property> <!-- 其他原有配置(比如认证策略)保持不变 --> </bean>
最后一步:重启CAS服务器
完成所有配置后,重启你的CAS 4.0.0服务器,再调用之前的serviceValidate接口,就能得到包含额外属性的响应了,和你预期的格式完全一致。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

