CASServer5.3.* 返回多值及Spring Boot集成获取用户属性数据
1. 环境准备
部署CASServer5.3 ,详见
https://blog.csdn.net/yuquan0405/article/details/113095856
部署SpringBoot项目,详见百度
2. CAS配置
2.1 application.properties 配置
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
cas.serviceRegistry.json.location=classpath:/services
#多值配置
cas.authn.jdbc.query[0].principalAttributeList=email,id,nickname
2.2 HTTPSandIMAPS-10000001.json
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|http|imaps)://.*",
"name" : "HTTPS and IMAPS",
"id" : 10000001,
"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
"evaluationOrder" : 10000,
"attributeReleasePolicy": {
"@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
}
}
3. SpringBoot配置
3.1 配置文件
cas: server-url-prefix: http://127.0.0.1:8443/cas server-login-url: http://127.0.0.1:8443/cas/login client-host-url: http://127.0.0.1:8088 use-session: true validation-type: cas3 casClientLogoutUrl: http://127.0.0.1:8443/cas/logout?service=http://127.0.0.1:8088/logout/success
3.2 配置代码
@Configuration
public class CASAutoConfig {
@Value("${cas.server-url-prefix}")
private String serverUrlPrefix;
@Value("${cas.server-login-url}")
private String serverLoginUrl;
@Value("${cas.client-host-url}")
private String clientHostUrl;
/**
* 授权过滤器
* @return
*/
@Bean
public FilterRegistrationBean filterAuthenticationRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new AuthenticationFilter());
// 设定匹配的路径
registration.addUrlPatterns("/*");
Map<String,String> initParameters = new HashMap<String, String>();
initParameters.put("casServerLoginUrl", serverUrlPrefix);
initParameters.put("serverName", clientHostUrl);
//忽略的url,"|"分隔多个url
initParameters.put("ignorePattern", "/logout/success|/index");
registration.setInitParameters(initParameters);
// 设定加载的顺序
registration.setOrder(1);
return registration;
}
}
3.3 任意位置获取用户信息代码
可根据实际情况进行业务逻辑处理,如过滤器、控制层中都可以使用。
Map attrMap = ((AttributePrincipal) request.getUserPrincipal()).getAttributes();
for (Iterator<String> it = attrMap.keySet().iterator(); it.hasNext(); ) {
String key = it.next();
System.out.println(key +":"+attrMap.get(key));
}