概述
cas-server默认的可用信息只有用户名, 如果我还想知道他的角色类型等其它属性,这时候就需要做一些配置了。其它代码编写代码方式这里不做介绍,只做简单配置的方式介绍。
想了解更多,请查看我的以往文章。
配置JDBC返回多属性
首先我们在resources下面application.properties中开启服务配置,这里以Json配置为例。
然后再在pom.xml文件中开启Json依赖包和属性返回依赖包,同时注释掉无关的包。
<!-- Json Service Registry --> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-json-service-registry</artifactId> <version>${cas.version}</version> </dependency> <!-- Authentication Attributes --> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-core-authentication-attributes</artifactId> <version>${cas.version}</version> </dependency>
<dependentWarExcludes> <!-- 让war包下的json不初始化 --> **/services/*.json </dependentWarExcludes>
具体的Json配置文件如下:
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "^(https|imaps|http)://.*", "name" : "web", "id" : 10000001, "evaluationOrder" : 10, "accessStrategy" : { "@class" : "org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy", "enabled" : true, "ssoEnabled" : true }, "attributeReleasePolicy": { "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy" }, "theme": "tongyao" }
在这里我们添加如下的配置:
"attributeReleasePolicy": { "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy" }
这个配置就是Return All模式,返回所有的相关配置了的属性。如果我们要限制某些属性的返回,可以配置如下:
"attributeReleasePolicy" : { "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy", "allowedAttributes" : [ "java.util.ArrayList", [ "username", "mail" ] ] }
这里的意思就是只让username和email进行返回。
接着我们开启JDBC认证和JDBC多属性返回情况,如下:
JDBC认证配置:
## # JDBC配置 # #查询账号密码SQL,必须包含密码字段 cas.authn.jdbc.query[0].sql=select * from user where username=? #指定上面的SQL查询字段名(必须) cas.authn.jdbc.query[0].fieldPassword=password #指定过期字段,1为过期,若过期不可用 cas.authn.jdbc.query[0].fieldExpired=expired #为不可用字段段,1为不可用,需要修改密码 cas.authn.jdbc.query[0].fieldDisabled=disabled #数据库连接 cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false #数据库dialect配置 cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect #数据库用户名 cas.authn.jdbc.query[0].user=root #数据库用户密码 cas.authn.jdbc.query[0].password=123 #数据库事务自动提交 cas.authn.jdbc.query[0].autocommit=false #数据库驱动 cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver #超时配置 cas.authn.jdbc.query[0].idleTimeout=5000
重启CAS服务,CAS使用原来代码的模板登录,并且使用JDBC认证。
JDBC多属性配置:
单行属性配置
#单行属性 cas.authn.attributeRepository.jdbc[0].attributes.username=username cas.authn.attributeRepository.jdbc[0].attributes.password=password cas.authn.attributeRepository.jdbc[0].attributes.email=email cas.authn.attributeRepository.jdbc[0].singleRow=true cas.authn.attributeRepository.jdbc[0].order=0 cas.authn.attributeRepository.jdbc[0].requireAllAttributes=true # cas.authn.attributeRepository.jdbc[0].caseCanonicalization=NONE|LOWER|UPPER # cas.authn.attributeRepository.jdbc[0].queryType=OR|AND cas.authn.attributeRepository.jdbc[0].sql=SELECT * FROM user WHERE {0} cas.authn.attributeRepository.jdbc[0].username=username #数据库连接 cas.authn.attributeRepository.jdbc[0].url=jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false #数据库dialect配置 cas.authn.attributeRepository.jdbc[0].dialect=org.hibernate.dialect.MySQLDialect #数据库用户名 cas.authn.attributeRepository.jdbc[0].user=root #数据库用户密码 cas.authn.attributeRepository.jdbc[0].password=123 #数据库事务自动提交 cas.authn.attributeRepository.jdbc[0].autocommit=false #数据库驱动 cas.authn.attributeRepository.jdbc[0].driverClass=com.mysql.jdbc.Driver #超时配置 cas.authn.attributeRepository.jdbc[0].idleTimeout=5000 cas.authn.attributeRepository.jdbc[0].ddlAuto=none cas.authn.attributeRepository.jdbc[0].leakThreshold=10 cas.authn.attributeRepository.jdbc[0].batchSize=1 cas.authn.attributeRepository.jdbc[0].dataSourceProxy=false
然后启动官方的客户端Demo,登录后可以发现我们配置的属性都出来了。
JSON服务不明的话,可以看看我文章:springboot 集成cas5.3 配置及管理JSON Service服务这个文章详细讲解了JSON服务注册管理。
在这里插入图片描述
比如现在我有一张user_attrs表,分别是同一个用户不同角色对应在不同公司任职。这里就会使用到多行的属性返回。
#多行属性 cas.authn.attributeRepository.jdbc[1].attributes.admin=admin_multi cas.authn.attributeRepository.jdbc[1].attributes.dev=dev_multi cas.authn.attributeRepository.jdbc[1].attributes.user=user_multi cas.authn.attributeRepository.jdbc[1].columnMappings.role=company cas.authn.attributeRepository.jdbc[1].singleRow=false cas.authn.attributeRepository.jdbc[1].order=1 cas.authn.attributeRepository.jdbc[1].requireAllAttributes=true # cas.authn.attributeRepository.jdbc[1].caseCanonicalization=NONE|LOWER|UPPER # cas.authn.attributeRepository.jdbc[1].queryType=OR|AND cas.authn.attributeRepository.jdbc[1].sql=SELECT * FROM user_attrs WHERE {0} cas.authn.attributeRepository.jdbc[1].username=username #数据库连接 cas.authn.attributeRepository.jdbc[1].url=jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false #数据库dialect配置 cas.authn.attributeRepository.jdbc[1].dialect=org.hibernate.dialect.MySQLDialect #数据库用户名 cas.authn.attributeRepository.jdbc[1].user=root #数据库用户密码 cas.authn.attributeRepository.jdbc[1].password=123 #数据库事务自动提交 cas.authn.attributeRepository.jdbc[1].autocommit=false #数据库驱动 cas.authn.attributeRepository.jdbc[1].driverClass=com.mysql.jdbc.Driver #超时配置 cas.authn.attributeRepository.jdbc[1].idleTimeout=5000 cas.authn.attributeRepository.jdbc[1].ddlAuto=none cas.authn.attributeRepository.jdbc[1].leakThreshold=10 cas.authn.attributeRepository.jdbc[1].batchSize=1 cas.authn.attributeRepository.jdbc[1].dataSourceProxy=false
客户端获取多属性方法
@RequestMapping("/getUserInfo") @ResponseBody public String getUserInfo(HttpSession session){ Assertion assertion = (Assertion)session.getAttribute(CONST_CAS_ASSERTION); AttributePrincipal principal = assertion.getPrincipal(); return principal ; }
也可以使用官方示例demo传送门,我这个文章有做讲解
登录成功,返回官方示例demo后出现的参数。
自定义认证返回多属性
springboot 集成cas5.3 实现自定义认证策略。详细讲解了自定义认证策略
在返回对象的时候,添加HashMap即可。
对应的JSON服务也添加配置
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "^(https|http)://localhost:8083.*", "name" : "demo3", "id" : 10000006, "description" : "允许demo3-单点退出 访问", "evaluationOrder" : 10 /*多属性返回,大坑:返回的时候,json里一定要跟自定义认证策略里的map值一致*/ ,"attributeReleasePolicy" : { /*全部返回*/ "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy", /*只返回指定属性*/ /*"@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy", "allowedAttributes" : [ "java.util.ArrayList", [ "username", "password" ] ]*/ } }
需要注意,attributeReleasePolicy下的
#全部返回 org.apereo.cas.services.ReturnAllAttributeReleasePolicy #只返回指定属性 org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy "allowedAttributes" : [ "java.util.ArrayList", [ "username", "password" ] ]
关于cas更多信息,可以查看我以往文章。