关于CAS的搭建以及使用,在之前的文章有提到过, 现在需要在之前的基础上继续完善, 今天要完善的内容是给OAuth2.0添加自定义的用户信息, 因为之前的默认返回的用户信息对我们有用的也就只有用户名, 好在这些都是可以自定义的
分析
CAS中的OAuth2.0提供了一个/oauth2.0/profile接口, 这个接口是可以获取用户资源的因此我们改造它就可以了
OAuth20UserProfileViewRenderer
我们要做的就是自定义实现这个接口, 然后在这个方法里面返回我们需要的用户信息
自定义实现
@Slf4j
public class CustomOAuth20UserProfileViewRenderer implements OAuth20UserProfileViewRenderer {
@Autowired
private SysUserService sysUserService;
@Override
public String render(Map<String, Object> model, AccessToken accessToken) {
try {
//获取id, id其实就是用户名
String userName = (String) model.get("id");
if (userName != null) {
//根据用户名获取用户详细信息
SysUser sysUser = sysUserService.getBaseMapper().selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUserName, userName));
if (sysUser != null) {
//将用户信息放入model中
SysUserVo sysUserVo = new SysUserVo();
BeanUtils.copyProperties(sysUser,sysUserVo);
return JSONUtil.toJsonStr(sysUserVo);
}
}
} catch (Exception e) {
log.error("OAuth获取用户信息错误!", e);
throw new RuntimeException("OAuth获取用户信息错误!");
}
return null;
}
}
该方法是现充model里获取用户名, 这里用户名的key是id, 这个是CAS默认的, 然后根据用户名获取用户信息即可,自定义用户的部分就不多介绍了,主要的就是这个方法
将自定义接口注入容器
@Configuration("customAuthenticationConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class CustomOAuthConfiguration {
@Bean
@RefreshScope
public OAuth20UserProfileViewRenderer oauthUserProfileViewRenderer() {
CustomOAuth20UserProfileViewRenderer customOAuth20UserProfileViewRenderer = new CustomOAuth20UserProfileViewRenderer();
return customOAuth20UserProfileViewRenderer;
}
}
添加spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apereo.cas.config.CasEmbeddedContainerTomcatConfiguration,\
org.apereo.cas.config.CasEmbeddedContainerTomcatFiltersConfiguration,\
xxx.xxx.xxx.config.CustomOAuth20UserProfileViewRenderer