点击上方“芋道源码”,选择“设为星标”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 8:55 更新文章,每天掉亿点点头发...
源码精品专栏
摘要: 原创出处 http://www.iocoder.cn/Apollo/portal-auth-1/ 「芋道源码」欢迎转载,保留摘要,谢谢!
1. 概述
2. AuthConfiguration
3. Users
4. Authorities
5. UserService
6. UserInfoHolder
7. SsoHeartbeatHandler
8. LogoutHandler
1. 概述
老艿艿:本系列假定胖友已经阅读过 《Apollo 官方 wiki 文档》 ,特别是 《Portal 实现用户登录功能》 。
本文分享 Portal 的认证与授权,侧重在认证部分。
在 《Portal 实现用户登录功能》 文档的开头:
Apollo 是配置管理系统,会提供权限管理(Authorization),理论上是不负责用户登录认证功能的实现(Authentication)。
所以 Apollo 定义了一些SPI用来解耦,Apollo 接入登录的关键就是实现这些 SPI 。
和我们理解的 JDK SPI 不同,Apollo 是基于 Spring Profile 的特性,配合上 Spring Java Configuration 实现了类似 SPI 的功能。对于大多数人,我们可能比较熟悉的是,基于不同的 Profile 加载不同环境的 yaml
或 properties
配置文件。所以,当笔者看到这样的玩法,也是眼前一亮。
在 apollo-portal
项目中,spi
包下,我们可以看到认证相关的配置与实现,如下图所示:
绿框:接口。
紫框:实现。
红框:配置接口对应的实现。
2. AuthConfiguration
com.ctrip.framework.apollo.portal.spi.configuration.AuthConfiguration
,认证 Spring Java 配置。如下图:
目前有三种实现:
第一种,
profile=ctrip
,携程内部实现,接入了SSO并实现用户搜索、查询接口。第二种,
profile=auth
,使用 Apollo 提供的 Spring Security 简单认证。第三种,
profile
为空,使用默认实现,全局只有 apollo 一个账号。
一般情况下,我们使用第二种,基于 Spring Security 的实现。所以本文仅分享这种方式。对其他方式感兴趣的胖友,可以自己读下代码哈。
整体类图如下:
2.1 SpringSecurityAuthAutoConfiguration
UserService ,配置如下:
@Bean
@ConditionalOnMissingBean(UserService.class)
public Use