外观
yidun-account — 账号权限与 SSO 用户中心
分层:业务层 | 部署单元:1 个 | 数据库:MySQL(yd_platform) | base image:private-registry.nis.netease.com/library/base-image:jdk17
一、模块定位与架构
本模块是易盾的账号 / 权限 / 登录中心:对外通过 Dubbo 暴露账号与会话查询,向内以控制台 REST + Spring Security 过滤链承载登录认证,账号、权限、会话等数据统一落在 RDS 库 yd_platform。它既服务易盾自有的登录(id.grow.163.com SSO),也支持网易云账号认证接入。
架构分层(协议/逻辑/数据三层映射到子模块):
- 协议层:
facade/dubbo-provider(Dubbo 查询契约,唯一可构建单元)、console/api(控制台 REST + 登录/SSO,端口 8918)、facade/http-api(HTTP 骨架,端口 8080)。 - 逻辑层:
service/business(账号/会话/消息服务,另承载yidun-common/yidun-authority/opinion-*语义 profile 配置)、scheduler(定时任务,无实现)。 - 数据层:
service/base(MyBatis DAO)、domain、common。
关键数据流:
客户端登录 → console/api SecurityConfiguration 过滤链(YunAccountAuthenticationFilter → YidunAccountAuthenticationFilter → YidunTokenFilter) → 校验 SSO yun-account.api-url=https://id.grow.163.com → AccountService → MySQL yd_platform → facade/dubbo-provider 对外暴露账号/会话查询供其它系统调用。
核心业务概念:
- 账号模型:主账号(MAIN)/ 子账号(SUB)两层,子账号受主账号租户隔离约束(
AccountAuthChecker校验)。 - 角色域:区分
DUN_WEB(易盾官网)与CMS_SAAS(SaaS 控制台),RBAC 角色 + 菜单/数据权限。 - 权限点:以
@AcPreAuth注解在控制台切面拦截校验。 - 登录方式:易盾账号密码 + 验证码、网易云通行证(URS)Cookie 解密、镜像账号与区域限制。
- SSO:OIDC/LDAP 单点登录配置(
SsoConfigService/SsoFacade)集中管理。
二、可部署服务清单
| 部署单元目录 | artifactId | 镜像名 | 端口 | 服务类型 | 独立 Dockerfile | 是否进 kubernetes.yml |
|---|---|---|---|---|---|---|
facade/dubbo-provider | yidun-accountcenter-facade-dubbo-provider | yidun-accountcenter-facade-dubbo-provider | 随机(dubbo.protocol.port=-1) | Dubbo Provider | 有 | 无(模块无 kubernetes.yml) |
console/api | yidun-accountcenter-console-api | — | 8918 | 控制台后端 / 登录 SSO | 无(不构建) | 否 |
console/web | —(仅 README 空壳,无工程) | — | 无 | 前端骨架 | 无(不构建) | 否 |
facade/http-api | yidun-accountcenter-facade-http | — | 8080 | HTTP 接口骨架 | 无(不构建) | 否 |
scheduler | yidun-accountcenter-scheduler | — | 无 | 定时任务(无实现) | 无(不构建) | 否 |
facade/dubbo-api | yidun-accountcenter-facade-dubbo-api | — | 无 | Dubbo 接口定义(非部署单元) | 无(不构建) | 否 |
三、同模块启动顺序
facade/dubbo-provider— 唯一可构建镜像的单元,注册 Dubbo 账号/会话查询,供其它系统解析。- (可选,未构建)
console/api— 登录/SSO 与控制台入口,需自备 Dockerfile 才能部署。 - (可选,未构建)
facade/http-api、scheduler— 无可构建产物,暂不纳入启动序列。
四、逐服务启动逻辑
4.1 facade/dubbo-provider
- 启动类:
com.netease.is.yidun.ac.facade.dubbo.DubboApplication(facade/dubbo-provider/src/main/java/com/netease/is/yidun/ac/facade/dubbo/DubboApplication.java)。 - exclude:无。
@Enable*/@Import:@EnableAspectJAutoProxy。- 配置类:
configuration/FacadeDubboConfiguration——@ComponentScan(basePackageClasses = {AccountService.class})+@MapperScan(basePackageClasses = AccountDao.class)+@DubboComponentScan(basePackageClasses = AccountSessionFacadeProvider.class)。 - 配置格式:YAML。
application.yml:spring.application.name=yidun-accountcenter-dubbo-provider,spring.profiles.active=test,yidun-common,yidun-authority;另有application-private.yml。 - Dubbo:
dubbo.application.qos-enable=false;dubbo.protocol.port=-1;dubbo.registry.id=zookeeper(地址/group 由 profile 覆盖)。 main()自定义:无。- 启动钩子:
service/business/.../message/YidunMessageService.@PostConstruct。
4.2 console/api(无 Dockerfile,不构建)
- 启动类:
com.netease.is.yidun.ac.console.api.ConsoleApplication;仅@SpringBootApplication。 - 配置类:
ConsoleConfiguration——@ComponentScan(basePackageClasses = AccountService.class)+@MapperScan(basePackageClasses = AccountDao.class)+@ImportResource("classpath:ac-console-api-dubbo-consumer.xml");SecurityConfiguration(@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled=true)extendsWebSecurityConfigurerAdapter,装配 yun/yidun 认证过滤器与YidunTokenFilter);StrawberryTalkConfiguration;SwaggerConfiguration。 - 端口:
application.yml中server.port: 8918;application.yml内无dubbo.registry.address(靠 profile 覆盖)。 - 启动钩子:未发现(依赖 Spring Security 过滤链初始化)。
4.3 facade/http-api(无 Dockerfile,不构建)
- 启动类:
com.netease.is.yidun.ac.facade.http.HttpApplication;仅@SpringBootApplication。 - 配置类:
FacadeHttpConfiguration+SwaggerConfiguration。 application.properties:server.port=8080,mybatis.type-aliases-package=com.netease.is.yidun.ac.domain.model;application-online.properties为127.0.0.1:3306/fatelocalhost 模板。
4.4 scheduler(无 Dockerfile,不构建)
- 启动类:
com.netease.is.yidun.ac.scheduler.SchedulerApplication;@SpringBootApplication+@EnableScheduling。 - 配置类:
SchedulerConfiguration。 - 任务实现:未发现(无
@Scheduled、无*Task类)。 application-online.properties为 localhost 模板。
五、启动前置依赖
| 依赖 | 配置键/地址 | 阻塞 or 弱依赖 | 配置文件 |
|---|---|---|---|
| MySQL(RDS) | jdbc:mysql://yidun-rds-platform-online-jd-30178.rds.cn-east-p1.internal.:3331/yd_platform(com.mysql.jdbc.Driver,用户 yd_censor) | 阻塞 | facade/dubbo-provider/application-private.yml |
| Redis(Cluster) | spring.redis.cluster.nodes=10.200.131.180:7702,...;max-redirects=3;app.redis-namespace=ydac | 阻塞 | application-private.yml |
| ZooKeeper(Dubbo) | zookeeper://nisp-zk1.service.163.org:2181?backup=nisp-zk2..nisp-zk5;group /yidun/antispam/online-pre/yidun-antispam-dubbo(预发组) | 阻塞 | application-private.yml |
| SSO 账号服务 | yun-account.api-url=https://id.grow.163.com;app.console-url=http://dun.163.com | 弱依赖 | application-private.yml |
| 语义 profile 配置 | application-yidun-common.yml/application-yidun-authority.yml/application-opinion-*.yml(由 service/business 提供) | 阻塞(缺失即报错) | service/business/src/main/resources/ |
| 消息服务(下游) | yidun-message(YidunMessageService / message-sdk,子账号创建发邮件) | 弱依赖 | service/business |
| Apollo | 未发现显式接入 | — | — |
六、启动参数与 Profile
- Profiles:环境 profile
dev/test/pre/private/online/jiande-online/opinion-online/opinion-test+ 语义 profileyidun-common/yidun-authority/opinion-common/opinion-authority,两者组合激活(如test,yidun-common,yidun-authority)。 - Maven profile:
facade/dubbo-provider/build.sh默认BUILD_ENV=private,触发mvn clean install -P private;Dockerfile-Dspring.profiles.active=private。 - JAVA_OPTS:
-Xmx512m -Xms512m -XX:+UseG1GC -Dspring.profiles.active=private。 - base image 与仓库:
private-registry.nis.netease.com/library/base-image:jdk17;镜像仓库private-registry.nis.netease.com/yidun;tagbase-250409;jar 落/app/;build.sh用docker buildx --platform linux/amd64,linux/arm64。 - 启动命令(容器内):
bash docker-entrypoint.sh,实际执行java $JAVA_OPTS -jar /app/yidun-accountcenter-facade-dubbo-provider.jar。 - Profile 文件清单:
facade/dubbo-provider/src/main/resources/下application.yml、application-dev.yml、application-test.yml、application-pre.yml、application-private.yml、application-online.yml、application-jiande-online.yml、application-opinion-test.yml、application-opinion-online.yml。 - 语义 profile 文件(
service/business/src/main/resources/):application-yidun-common.yml、application-yidun-authority.yml、application-opinion-common.yml、application-opinion-authority.yml,需与spring.profiles.active中的语义段一一对应。
七、启动期踩坑
- private 的 Dubbo registry group 是
online-pre(/yidun/antispam/online-pre/yidun-antispam-dubbo),不是其它模块的online-new,写错会消费到错误环境的服务。 - 多 profile 组合激活:
spring.profiles.active形如test,yidun-common,yidun-authority,要求对应application-yidun-*.yml在 classpath(由service/business提供),漏一个即缺配置报错。 - 只有
facade/dubbo-provider可构建:承载登录/SSO 的console/api(8918)无 Dockerfile,容器化部署缺一环。 facade/http-api/scheduler的application-online.properties是 localhost 模板(127.0.0.1:3306/fate),不可直接用于生产。- 数据源是
yd_platform(RDS)而非 antispam 库,与其它业务模块的 DB 不共库。 console/api的application.yml未写dubbo.registry.address,靠 profile 覆盖,本地直启(不激活含的 profile)时连不上注册中心。- 配置全为 YAML 且无 Apollo,改配置需重新打包镜像。
YidunMessageService.@PostConstruct即启动钩子,其初始化失败会连带 dubbo-provider 启动异常。- 会话依赖 Redis Cluster(
AccountSessionService.createSession写 Redis,app.redis-namespace=ydac),Redis 不可用会直接导致登录失败。 - 子账号创建依赖下游:
AccountServiceImpl.createSubAccount走护照/姓名/邮箱校验 + 数量上限 + 发邮件(依赖yidun-message),下游异常会表现为创建失败。 - 上游调用面广:
antispam-guardian、antispam-list、antispam-rule、antispam-private-cib、yidun-supervision-cms、yidun-website等均消费本模块,账号/权限契约变更影响面大。
八、跨模块前置
- 依赖 SSO 账号服务
id.grow.163.com,登录/认证链路不可达会导致控制台登录失败。 - 依赖
service/business提供的多语义 profile 配置文件(application-yidun-*.yml)。 - 中间件前置:RDS MySQL
yd_platform、Redis Cluster、ZooKeeper(grouponline-pre)就绪。 console/api依赖 Dubbo(ac-console-api-dubbo-consumer.xml),需facade/dubbo-provider先注册。