项目地址

https://github.com/userwanyong/auth-service

开发环境

glm-4.7+claude code开发认证授权服务 以及 glm-5-turbo+cc用于对接两个线上项目

AI辅助确认需求

我要做一个有关登录、权限校验的微服务,请你检索市面上的相关服务(顶级开源项目等),列出我还需要支持哪些功能

审核AI给出的计划后,执行编码

首次启动报错了,默认使用的是JPA

让他改为mybatis

现在你需要将数据操作层换为mybatis,并遵循mapper包的形式

第二次成功启动

测试验收

  • 注册:成功注册用户并为他分配默认角色,注册功能验收通过!

  • 失败:登录、刷新访问令牌
  • 成功:登出、修改密码、删除用户、搜索用户、分配角色、更新用户状态、创建角色、更新角色、删除角色、根据编码获取角色、为角色分配权限、获取所有权限、创建权限、获取权限详情
  • 部分成功:获取当前用户信息、获取所有角色、获取角色详情
  • 漏写:删除权限

大部分功能是成功的,将自己测试的结果告诉AI,进行修复即可,最终所有功能正常使用

优化

  1. 因为jwt是无状态的,用户退出登录后再次使用原令牌(accessToken有效期内),依然有权限访问。用户登出同时将此令牌放入redis中,令牌校验时先判断一次是否在黑名单
  2. 对于token是在过滤器校验的,校验失败直接返回了,客户端什么消息都没收到。需要在校验失败时将具体信息返回给用户(是令牌失效啊还是令牌过期等等)

提供rpc接口

保留 REST API的同时,提供rpc接口并注册到nacos中。你需要先检索顶级开源项目的实现策略,编写一份开发文档,待我审核后再进行编码操作

这里AI给出的方案还是挺完整的,直接开始编写代码

最终,AI生成的yml文件中,有2个文件报错

貌似是idea缓存问题,代码中实际使用jakarta,但他一直报javax的问题

通过使用 webSearchPrime 和 webReader 两个mcp,定位真正原因:

接着让他提供Protobuf的形式来适用不同的编程语言

测试验收

  • authenticate、getUserById、hasRole、getUserRoles、generateToken、parseToken、revokeAllTokens 成功通过测试

支持多租户

现在这个微服务貌似只能是单应用认证,如果我想对接多个平台,应该怎么办(参考顶级开源项目的实现方案)

这次使用的是 webSearchPrime 、 webReader 、开源仓库搜索 三个mcp进行资料的搜索以及开源项目结构功能的分析,然后审核AI给出的方案,输入“按计划执行”,就可以去喝茶去了

至此,http的28个接口+rpc的10个接口就告一段落了

优化拓展

1. 现在租户管理与各租户用的是相同的权限,个体租户也可以进行租户管理了,这很不合理,所以对于租户管理应该有单独的一套租户平台权限,用于控制该认证授权微服务对租户的控制(CRUD等)
2. 对于现有的个体租户权限等体系保持不变,只需要新添加一套平台管理权限即可

添加前端页面

初始提示词

充分分析整个项目,确保你完全理解。我需要你写一个前端界面来对接已有的http接口,要求这个管理界面随此后端程序启动时一起启动,注意区分权限问题哦

最终效果如下(未使用任何skill,使用原生html和css作为静态资源随后端一起启动,因为我的最终目的是实用性和轻量级):

登录页

仪表盘

租户平台管理方

普通租户管理方

部署文件

version: '3.8'

services:
  auth-service:
    image: registry.cn-wulanchabu.aliyuncs.com/wanyj/auth-service:4.0
    container_name: auth-service-app
    restart: unless-stopped
    environment:
      TZ: Asia/Shanghai
      # Database Configuration
      SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3306/auth_service?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 12123
      # Redis Configuration
      SPRING_DATA_REDIS_HOST: 127.0.0.1
      SPRING_DATA_REDIS_PORT: 6379
      SPRING_DATA_REDIS_PASSWORD: 12123
      # Nacos Configuration
      dubbo.registry.address: nacos://127.0.0.1:8848
      dubbo.registry.username: nacos
      dubbo.registry.password: nacos
      dubbo.metadata-report.address: nacos://127.0.0.1:8848
      dubbo.metadata-report.username: nacos
      dubbo.metadata-report.password: nacos
      # JVM Configuration
      JAVA_OPTS: >-
        -XX:+UseContainerSupport
        -XX:MaxRAMPercentage=75.0
        -XX:+PrintGCDetails
        -XX:+PrintGCTimeStamps
        -Xlog:gc*:file=/logs/gc.log:time,tags:filecount=10,filesize=100M
    ports:
      - "8123:8123"   # REST API
      - "20880:20880" # Dubbo RPC
    volumes:
      - app-logs:/app/logs
    networks:
      - auth-network

# Named volumes for data persistence
volumes:
  app-logs:
    driver: local

# Network for service communication
networks:
  auth-network:
    driver: bridge

对接我的两个其他服务

后端部分

提示词集合如下

1. 请你分析整个项目,确保充分理解,特别是登录授权部分
2. 现在你需要参考 https://github.com/userwanyong/auth-service 这个开源项目,完善当前项目的认证授权功能(开源项目环境我已搭建好,你只需要写代码即可) 

期间有一个报错,以为是AI搞错了,直接丢给它了,结果一针定位,是我auth-server部署的问题

需要在auth-service部署文件中添加

DUBBO_IP_TO_REGISTRY: 你的ip

完美启动,无报错

修改36文件,新增1文件,所有与之有关的地方都进行了更改

然后让AI修改认证授权服务所要对接的两个项目的前端UI即可

最终本次开发的认证授权服务成功对接我的两线上个项目:

https://xybjz.wanyj.cn/ 和 https://lxzs.wanyj.cn/login 非常省心,这就是Vibe Coding的时代吗,全程没动手敲代码

最后,给大家一个优惠链接,有需要的小伙伴可以来看看:95折优惠链接

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐