当前位置: 首页 > wzjs >正文

全国黄页平台无锡优化网站

全国黄页平台,无锡优化网站,seo首页关键词优化,注册top域名做公司网站系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端后端代码)【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…

系列文章目录

  1. 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端+后端代码)
  2. 【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数
  3. 【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心交互函数及RAG知识库构建
  4. 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发
  5. 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权相关工具类代码

文章目录

  • 系列文章目录
  • 前言
  • 1.开发工具及环境准备
    • 1.1.开发工具
    • 1.2.数据库准备
      • 1.2.1.数据表构建命令
      • 1.2.2.数据表构建效果
  • 2.后端代码-登录鉴权
    • 2.1.SpringBoot文件架构:
    • 2.2.SpringBoot核心文件代码:
      • 2.2.1.UserController代码:主要用于定义Controller层逻辑,接收和返回网络请求
      • 2.2.2.UserService代码:主要用于定义Service层接口
      • 2.2.3.UserServiceImpl代码:主要用于定义Service层的具体逻辑实现
      • 2.2.4.UserMapper代码:主要用于定义Mapper层的接口以及具体实现


前言

在前几篇文章中,我们不仅成功搭建了一个具备知识检索与生成能力的AI问答系统,实现了从知识库构建、向量化存储到微信端交互的完整链路。还通过代码逐行精讲阐明了后端开发中SpringAI框架的使用方法和相关参数含义。

显而易见地,一个成熟的AI问答助手需要对用户鉴权,从而保证用户身份的真实性和请求的合法性。通过对用户鉴权我们就能够限定用户发送的请求数,从而避免api的恶意攻击和消耗。因此,本文主要通过编写后端中的SpringBoot代码实现用户鉴权逻辑,前端则主要使用wx.login函数获取用户的code后进一步获取openid,最终实现身份认证。

1.开发工具及环境准备

1.1.开发工具

IntelliJ IDEA
微信开发者工具
MySQL
JDK版本 >= 17
Spring Boot版本 >= 3.3.x
阿里云百炼api_keyu获取:阿里云百炼官网api获取教程

1.2.数据库准备

1.2.1.数据表构建命令

CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,openid VARCHAR(50) NOT NULL UNIQUE,res_request INT NOT NULL DEFAULT 5
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

1.2.2.数据表构建效果

在这里插入图片描述

2.后端代码-登录鉴权

2.1.SpringBoot文件架构:

在这里插入图片描述

2.2.SpringBoot核心文件代码:

2.2.1.UserController代码:主要用于定义Controller层逻辑,接收和返回网络请求

package com.alichat.alibabaChatModel.controller;import com.alichat.alibabaChatModel.DTO.UserLoginDTO;
import com.alichat.alibabaChatModel.VO.UserLoginVO;
import com.alichat.alibabaChatModel.constant.JwtClaimsConstant;
import com.alichat.alibabaChatModel.entity.User;
import com.alichat.alibabaChatModel.properties.JwtProperties;
import com.alichat.alibabaChatModel.result.Result;
import com.alichat.alibabaChatModel.service.UserService;
import com.alichat.alibabaChatModel.utils.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;/*** 用户管理*/@RestController
@RequestMapping("/ali/user")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate JwtProperties jwtProperties;/*** 微信登录* @param userLoginDTO* @return*/@PostMapping("/login")public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO) {log.info("微信登录:{}", userLoginDTO.getCode());User user = userService.wxlogin(userLoginDTO);HashMap<String, Object> claims = new HashMap<>();claims.put(JwtClaimsConstant.USER_ID, user.getId());String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims);UserLoginVO userLoginVO = UserLoginVO.builder().id(user.getId()).openid(user.getOpenid()).token(token).build();log.info(userLoginVO.getToken());return Result.success(userLoginVO);}}

2.2.2.UserService代码:主要用于定义Service层接口

package com.alichat.alibabaChatModel.service;import com.alichat.alibabaChatModel.DTO.UserLoginDTO;
import com.alichat.alibabaChatModel.entity.User;public interface UserService {/*** 微信登录* @param userLoginDTO* @return*/User wxlogin(UserLoginDTO userLoginDTO);/*** 根据用户id查询用户* @param id* @return*/User getById(Long id);/*** 更新用户* @param user* @return*/void updateUser(User user);
}

2.2.3.UserServiceImpl代码:主要用于定义Service层的具体逻辑实现

package com.alichat.alibabaChatModel.service.impl;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alichat.alibabaChatModel.DTO.UserLoginDTO;
import com.alichat.alibabaChatModel.constant.MessageConstant;
import com.alichat.alibabaChatModel.entity.User;
import com.alichat.alibabaChatModel.exception.AccountNotFoundException;
import com.alichat.alibabaChatModel.exception.LoginFailedException;
import com.alichat.alibabaChatModel.exception.PasswordErrorException;
import com.alichat.alibabaChatModel.mapper.UserMapper;
import com.alichat.alibabaChatModel.properties.WeChatProperties;
import com.alichat.alibabaChatModel.service.UserService;
import com.alichat.alibabaChatModel.utils.HttpClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;@Service
public class UserServiceImpl implements UserService {//微信服务接口地址public static final String WX_LOGIN = "http://api.weixin.qq.com/sns/jscode2session";@Autowiredprivate WeChatProperties weChatProperties;@AutowiredUserMapper userMapper;/*** 调用微信接口服务,获取微信用户的openid* @param code* @return*/private String getOpenid(String code) {Map<String, String> map = new HashMap<String, String>();map.put("appid", weChatProperties.getAppid());map.put("secret", weChatProperties.getSecret());map.put("js_code", code);map.put("grant_type", "authorization_code");String json = HttpClientUtil.doGet(WX_LOGIN, map);JSONObject jsonObject = JSON.parseObject(json);String openid = jsonObject.getString("openid");return openid;}/*** 微信登录* @param userLoginDTO* @return*/public User wxlogin(UserLoginDTO userLoginDTO) {String openid = getOpenid(userLoginDTO.getCode());if(openid == null) {throw new LoginFailedException(MessageConstant.LOGIN_FAILED);}User user = userMapper.getByOpenid(openid);long resRequset = 5;if(user == null) {user = User.builder().openid(openid).resRequest(resRequset).build();userMapper.insert(user);}return user;}/*** 根据用户id查询用户* @param id* @return*/public User getById(Long id){User user = userMapper.getById(id);return user;}/*** 更新用户* @param user* @return*/public void updateUser(User user){userMapper.update(user);}
}

2.2.4.UserMapper代码:主要用于定义Mapper层的接口以及具体实现

代码主要分为两个同名文件,java文件位于com.alichat.alibabaChatModel的mapper文件夹下,xml文件位于resources的mapper文件夹下,这两个文件时对应的。

UserMapper.java文件代码:

package com.alichat.alibabaChatModel.mapper;import com.alichat.alibabaChatModel.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {/*** 根据openid获取用户* @param openid* @return*/@Select("select * from user where openid = #{openid}")User getByOpenid(String openid);/*** 插入用户* @param user*/void insert(User user);/*** 根据id获取用户* @param id* @return*/@Select("select * from user where id = #{id}")User getById(Long id);/*** 更新用户* @param user* @return*/void update(User user);
}

UserMapper.xml文件代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.alichat.alibabaChatModel.mapper.UserMapper"><insert id="insert" useGeneratedKeys="true" keyProperty="id">insert into user (openid, res_request)values (#{openid},#{resRequest})</insert><update id="update">update user<set><if test="openid != null">openid = #{openid},</if><if test="resRequest != null">res_request = #{resRequest},</if></set>where id = #{id}</update>
</mapper>

文章转载自:

http://ir0gmwsN.Lsfzq.cn
http://lsXMg3AI.Lsfzq.cn
http://gUruUqgo.Lsfzq.cn
http://7JTXV08o.Lsfzq.cn
http://WEAG1Ne5.Lsfzq.cn
http://9pgohxPq.Lsfzq.cn
http://LAGezpBt.Lsfzq.cn
http://I70hsu5j.Lsfzq.cn
http://RmuZbFBU.Lsfzq.cn
http://x4d3z46a.Lsfzq.cn
http://UpV6TzsD.Lsfzq.cn
http://NdAPYJqW.Lsfzq.cn
http://MMx6QK98.Lsfzq.cn
http://idQaMUYK.Lsfzq.cn
http://Fcti9B5D.Lsfzq.cn
http://oCV6Q9O2.Lsfzq.cn
http://wjNjQGSh.Lsfzq.cn
http://nkUdcrIG.Lsfzq.cn
http://kqMmJwZi.Lsfzq.cn
http://nVoUp95E.Lsfzq.cn
http://EdjjNWb1.Lsfzq.cn
http://PXsr9yyk.Lsfzq.cn
http://Ud7jfCJQ.Lsfzq.cn
http://DNI7Nw4Q.Lsfzq.cn
http://j4TzIemN.Lsfzq.cn
http://W29M2Pli.Lsfzq.cn
http://WBUW85Li.Lsfzq.cn
http://oTtSaNQU.Lsfzq.cn
http://VTznl7fb.Lsfzq.cn
http://EL25TyEI.Lsfzq.cn
http://www.dtcms.com/wzjs/630143.html

相关文章:

  • 网站建设公司及网络安全法精品课网站怎么做
  • 网站备案和服务器备案吗dedeai网站最新
  • 俄语网站里做外贸shop淮北网站开发公司
  • 网站优化推广seowordpress 火车采集
  • 网站开发工具的功能app开发比较好的公司
  • 一级域名 二级域名 目录网站推广网站推广工具有啥
  • 443是端口网站建设哪个小说网站版权做的好
  • wordpress手机同步湛江网站关键字优化
  • 有经验的手机网站建设网站优化策划方案
  • 网站宣传方案北京网站设计公司cg成都柚米科技15
  • 做网站用户充值提现seo教程论坛
  • 做网站网站需要多少钱做30个精品网站
  • 网站开发基本流程网站建设.c
  • 网站建设分析方法怎么做网站访问量
  • 搭建平台有哪些平台说法西安seo霸屏
  • 网站开发所要达到的目标网站建建设
  • 网站注册免费qq网站建设junke100
  • 北京做网站比较好的公司wordpress 换空间
  • 网站开发工具 哪个好淳安千岛湖建设集团网站
  • 网站建设相关的书籍视频网站的做
  • 卢松松网站的百度广告怎么做的点墨网站
  • 网站建设get你编辑html
  • 雕塑网站模板typecho导入wordpress
  • 大型网站建设视频坚持以高质量发展为首要任务一
  • 阿里云做网站麻烦吗织梦转wordpress
  • 做网站经营流量wordpress随机评论头像
  • 《网站开发实训》实验报告WordPress部署商城
  • dedecms 企业网站前端个人网站模板
  • 好大夫官方网站网上预约挂号网站开发税收标准
  • 企业网站推广文案哪个网站做员工增员