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

深圳模板网站多少钱政务中心网站建设方案

深圳模板网站多少钱,政务中心网站建设方案,阿里巴巴国际站怎么做网站模版,wordpress迁移网站系列文章目录 【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://www.dtcms.com/a/473824.html

相关文章:

  • spring boot拦截器获取requestBody的巨坑
  • [2]python爬虫实践,爬取网易云音乐热歌榜排行版名称
  • 网站快速备案公司wordpress文章末尾加上相关文章
  • WebAssembly联调实践:Rust计算模块与Node.js后端的性能对比
  • 利用万网做网站建筑工程网下载
  • 麒麟系统开机启动
  • Redis-List
  • PHP基础教程:从入门到精通
  • 瓦力机器人-舵机控制(基于树莓派5)
  • 建设银行南通通州支行网站如何改wordpress里的代码
  • linux网站环境网站公司的好坏
  • 音视频学习(六十九):视音频噪声
  • Python 爬虫实战 | Selenium 高效自动化:Headless + 无痕浏览深度解析
  • Java SpringMVC(三)--- SpringMVC,SpringIoCDI
  • 网站建设的验收网站上如何放入地图
  • Java 开发工具,最新2025 IDEA 使用,保姆级教程
  • 内网穿透~
  • 【Java EE进阶 --- SpringBoot】Mybatis操作数据库(基础二)
  • 【ComfyUI】Flux 扩展原始图像边界
  • 068B-基于R语言平台Biomod2集成模型的物种分布模型构建和数据可视化教程【2027】
  • Custom SRP 12 - HDR
  • 偏振相机是否属于不同光谱相机的范围内
  • 烟台房地产网站建设视频直播服务
  • SQL Server中alter对于表的常用操作
  • 学校网站建设报告九江 网站建设公司
  • Blender图片转3D模型智能插件 True Depth V2附使用教程
  • 【数据分享】中国土地利用数据(1980-2015)
  • 工信部网站备案通知怎么样免费给网站做优化
  • Differentially Private Synthetic Text Generation for RAG——论文阅读
  • SQL入门:流程控制函数全解析