[!IMPORTANT]
- HttpClient 是什么?它的作用是什么?
- 在微信登录流程中,code 是什么?它的作用是什么?
- 微信登录的具体步骤有哪些?
- 在微信登录流程中,token 的作用是什么?
- 在微信登录中,如何生成 JWT 令牌?
- 在微信登录流程中,如何通过 HttpClient 向微信服务器发送请求?
- 微信登录的服务端如何处理新用户的注册?
- 在微信登录中,如何生成一个新的用户对象?
- 如何在后端进行 JWT 令牌的验证?
- 在微信登录的控制器中,如何返回登录结果?
- 如何在 WebMvcConfiguration 中配置拦截器?
-
HttpClient 是什么?它的作用是什么?
HttpClient 是 Apache Jakarta Commons 下的一个项目,提供高效的客户端编程工具包,支持 HTTP 协议的最新版本。它的作用是发送 HTTP 请求并接收响应数据。 -
在微信登录流程中,code 是什么?它的作用是什么?
code 是微信小程序通过wx.login()
获取的临时凭证,只有一次有效。它的作用是防止直接暴露用户身份,确保用户的隐私不被泄露。开发者服务器使用 code 来向微信服务器换取用户的唯一标识 openid 和会话密钥 session_key。 -
微信登录的具体步骤有哪些?
- 小程序获取临时门票(code):调用
wx.login()
获取 code。 - 小程序发送 code 到服务器:使用
wx.request()
把 code 发送到开发者服务器。 - 服务器向微信验证 code:开发者服务器通过 HttpClient 向微信接口服务发送请求,携带 appId、appSecret 和 code 进行验证。
- 微信返回 openid 和 session_key:微信返回用户的唯一标识 openid 和临时的 session_key。
- 服务器生成 token:开发者服务器根据 openid 创建自定义的 token,返回给小程序。
- 小程序存储 token:小程序将 token 存储到本地。
- 后续请求携带 token:小程序在后续请求中携带 token,服务器解析 token 并验证用户身份。
- 小程序获取临时门票(code):调用
用户点击微信登录按钮 → 小程序调用 wx.login()
方法 → 小程序生成临时凭证 code
→ 小程序通过 wx.request()
将 code
发送到开发者服务器 → 开发者服务器接收到 code
→ 开发者服务器向微信服务器发送请求,携带 code
、appId
和 appSecret
→ 微信服务器验证 code
是否有效 → 微信服务器返回 openid
和 session_key
→ 开发者服务器使用 openid
生成 JWT token → 开发者服务器将 token
返回给小程序 → 小程序接收到 token
并存储到本地存储中 → 用户进行后续操作时,小程序每次请求携带 token
→ 服务器解析 token
并验证其有效性 → 如果 token
有效,服务器返回相应的业务数据;如果无效,服务器要求重新登录 → 用户继续与系统互动,直到退出登录为止。
-
在微信登录流程中,token 的作用是什么?
token 是开发者服务器生成的自定义通行证,用来代替 openid 传递,避免在请求中暴露用户的敏感信息。token 由开发者根据 openid 和其他信息签发,并用于验证用户身份。 -
在微信登录中,如何生成 JWT 令牌?
生成 JWT 令牌的步骤如下:- 创建一个 Map 集合,用来存放 JWT 的有效载荷(比如用户的 id)。
- 使用 JWT 工具类,传入密钥、有效时间和有效载荷,生成 JWT 令牌。
- 返回生成的 token 给小程序。
-
在微信登录流程中,如何通过 HttpClient 向微信服务器发送请求?
通过 HttpClient 向微信服务器发送请求的步骤:- 创建一个 Map 集合,存储
appid
、secret
、code
和grant_type
等参数。 - 使用 HttpClient 工具类(如
HttpClientUtil.doGet()
),将接口地址和 Map 集合传入,发起 GET 请求。 - 解析返回的 JSON 数据,提取出 openid。
- 创建一个 Map 集合,存储
-
微信登录的服务端如何处理新用户的注册?
服务端通过 openid 判断用户是否为新用户。如果是新用户,则通过 openid 创建一个新的用户对象,并插入数据库。否则,直接返回已有的用户信息。 -
在微信登录中,如何生成一个新的用户对象?
在微信登录中,如果是新用户,创建新的用户对象的步骤如下:- 使用 openid 和当前时间(createTime)构造一个新的用户对象。
- 将该用户对象插入数据库。
User user = User.builder().openid(openid).createTime(LocalDateTime.now()).build(); userMapper.insert(user);
-
如何在后端进行 JWT 令牌的验证?
后端通过解析传入的 JWT 令牌,检查其有效性。验证过程包括:- 解析 token,获取其中的有效载荷。
- 根据密钥和过期时间判断 token 是否有效。
- 如果有效,提取出用户信息(如 openid)并继续处理业务逻辑。如果无效,则返回错误提示。
-
在微信登录的controller中,如何返回登录结果?
在controller层中,登录结果通过封装为 VO 对象并返回给前端。具体实现是:- 调用服务层的微信登录方法获取用户对象User。
- 根据用户对象生成 JWT 令牌。
- 构建
UserLoginVO
对象,包含用户 id、openid 和 token。 - 使用
Result.success()
方法将 VO 对象返回给前端。
-
如何在 WebMvcConfiguration 中配置拦截器?
在WebMvcConfiguration
中配置拦截器的方法如下:- 创建拦截器类(如
JwtTokenUserInterceptor
)用于统一处理 JWT 校验。 - 在
addInterceptors()
方法中,注册该拦截器,并配置要拦截的路径。
registry.addInterceptor(jwtTokenUserInterceptor).addPathPatterns("/user/**").excludePathPatterns("/user/user/login").excludePathPatterns("/user/shop/status");
- 创建拦截器类(如