山東大學項目實訓-創新實訓-法律文書專家系統-項目報告(八)

項目實訓博客 :? 項目后端架構 , 項目的四端交互(前端 ,后端 ,模型端 ,數據庫)的開發和維護 , 項目功能總覽

作為項目的后端和前端交互功能主要開發者,我需要對項目的四端交互進行開發和維護.

總覽:

整體項目結構如圖所示:

?前后端的交互:

前端封裝了request.js :

方便前端向后端發送請求,它可以自請求發送前對請求做一些處理,比如統一加token,對請求參數統一加密,也可以在接受response后自動進行一些處理.

import axios from 'axios'const request = axios.create({baseURL: 'http://localhost:9090',  // 這里是全局統一加上了 '/api' 前綴,也就是說所有接口都會加上'/api'前綴在,頁面里面寫接口的時候就不要加 '/api'了,否則會出現2個'/api',類似 '/api/api/user'這樣的報錯,切記!!!timeout: 60000
})// request 攔截器
// 可以自請求發送前對請求做一些處理
// 比如統一加token,對請求參數統一加密
request.interceptors.request.use(config => {//config.headers['Content-Type'] = 'application/json;charset=utf-8';if (!(config.data instanceof FormData)) {config.headers['Content-Type'] = 'application/json;charset=utf-8';}// 設置請求頭let jwtToken = localStorage.getItem('jwtToken');if (jwtToken) {config.headers['jwtToken'] = jwtToken;}return config
}, error => {return Promise.reject(error)
});// response 攔截器
// 可以在接口響應后統一處理結果
request.interceptors.response.use(response => {let res = response.data;// 如果是返回的文件if (response.config.responseType === 'blob') {return res}// 兼容服務端返回的字符串數據if (typeof res === 'string') {res = res ? JSON.parse(res) : res}return res;},error => {console.log('err' + error) // for debugreturn Promise.reject(error)}
)export default request

前端的jwt會被儲存在瀏覽器的內存中登錄不同的用戶會被清除.

后端設置了攔截器:

webconfig:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允許跨域訪問的路徑.allowedOrigins("http://localhost:8080", "http://127.0.0.1:8080") // 允許跨域訪問的源.allowedMethods("GET", "POST", "PUT", "DELETE","INSERT") // 允許的HTTP方法.allowedHeaders("*") // 允許的請求頭.allowCredentials(true) // 是否允許發送cookie.maxAge(3600); // 預檢請求的緩存時間}@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注冊攔截器          并制定攔截的路徑資源                /**為攔截所有資源              不攔截那些資源registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login","/register");}}
 InterceptorRegistry:
@Slf4j
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {//目標方法資源運行之前執行,true為放行,false為不放行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//System.out.println("preHandle運行了");//獲取請求的urlString url = request.getRequestURI().toString();//判斷url中是否包含login(config文件中已經實現了這一點,其實可以刪掉)if (url.contains("login") || url.contains("register")) {//登錄操作直接放行return true;}//獲取令牌(token)String jwt = request.getHeader("jwtToken");System.out.println("令牌校驗獲取到的jwt:" + jwt);//判斷令牌是否存在,如果不存在,返回錯誤結果(未登錄)if (jwt == null) {//log.info("請求頭token為空,返回未登錄的信息");Result error = Result.error(Constants.CODE_401,"NOT_LOGIN");//手動將對象轉換為jsonString notLogin = JSONObject.toJSONString(error);//返回錯誤信息response.getWriter().write(notLogin);return false;}//如果jwt存在,則校驗jwttry {JwtUtils.parseJWT(jwt);} catch (Exception e) {//jwt令牌解析失敗e.printStackTrace();//log.info("解析令牌失敗返回未登錄的錯誤信息");Result error = Result.error("NOT_LOGIN");//手動將對象轉換為jsonString notLogin = JSONObject.toJSONString(error);//返回錯誤信息response.getWriter().write(notLogin);return false;}//令牌解析成功//放行資源(重要的一部)return true;}
}

兩個組合起來可以攔截除了登錄注冊以外的所有請求,攔截下來會校驗jwt令牌,校驗通過才會直接放行.

后端統一返回結果Result:

package com.example.demo.common;
public class Result {private Integer code;//響應碼,1 代表成功; 0 代表失敗private String msg;  //響應信息 描述字符串private Object data; //返回的數據public Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}//增刪改 成功響應public static Result success(){return new Result(200,"success",null);}//查詢 成功響應public static Result success(Object data){return new Result(200,"success",data);}public static Result success(String msg){return new Result(200,msg,null);}public static Result success(Integer code,String msg,Object data){return new Result(code,msg,data);}//失敗響應public static Result error(String msg){return new Result(Constants.CODE_500,msg,null);}public static Result error(Integer code,String msg){return new Result(code,msg,null);}public static Result error(Integer code,String msg,Object data){return new Result(code,msg,data);}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public String toString() {return "Result{code = " + code + ", msg = " + msg + ", data = " + data + "}";}
}

?后端的所有返回結果都會被封裝進這個類中,方便前端使用.

后端與模型端的交互:

使用了java的HttpClient庫:

以下是其中一個方法的示例:

            ObjectMapper mapper = new ObjectMapper();Map<String, Object> data = new HashMap<>();data.put("conversation_id",conversation_id);data.put("instruction", content);data.put("max_turns", "10");String jsonBody = mapper.writeValueAsString(data);HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://localhost:7860/chat")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(jsonBody)).build();// 發送請求并處理響應HttpClient client = HttpClient.newHttpClient();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Status code: " + response.statusCode());System.out.println("Response body: " + response.body());

?模型端會提供fastAPI生成的文檔,以供后端使用;

后端與數據庫的交互:

在?application.properties?中配置 MongoDB 連接參數:

spring.data.mongodb.uri=mongodb://localhost:27017/test

通過service層和repository層來進行交互

?

項目整體功能總覽:

登錄注冊功能:

?首頁:

法律文書摘要生成:

?其中星號和下載按鈕是收藏功能和下載pdf功能

?

?法律文書摘要收藏功能:

?

可點開查看詳情和刪除,查看詳情可進一步打印成pdf

?法律預測功能:

?

可打印為pdf

?法律問答功能:

?

支持顯示歷史記錄:

?

同是還可以清空歷史記錄:

?

?

感想:?

通過這次創新實訓,我們學到了很多東西,如mongodb的使用,模型的訓練,模型的微調,fastAPI等等,了解到了大模型在當有著無比深厚的潛力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85333.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85333.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85333.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12.8Java Swing 中的MVC

在 Java Swing 中&#xff0c;MVC 模式被廣泛應用。例如&#xff0c;JTable、JList 等組件都采用了這種模式。通常&#xff1a; 模型&#xff1a;實現特定的 Swing 模型接口&#xff08;如 TableModel、ListModel&#xff09;。視圖&#xff1a;是 Swing 組件本身&#xff08;…

DDS(Data Distribution Service)

DDS&#xff08;Data Distribution Service&#xff09;是一種以數據為中心的發布/訂閱&#xff08;DCPS&#xff09;通信中間件協議棧標準&#xff08;由OMG組織維護&#xff09;。它專為高性能、可預測、實時、可靠的分布式系統設計&#xff0c;廣泛應用于國防、航空航天、工…

python爬蟲關于多進程,多線程,協程的使用

簡介&#xff1a; python其實沒有真正意義的多線程&#xff0c;因為有GIL鎖存在&#xff0c;但是python3.13去掉GIL鎖&#xff0c;有兩個版本&#xff0c;python3.13t和python3.13&#xff0c;python3.13去掉GIL鎖相當于python底層大規模改變&#xff0c;肯定會影響一些庫的使…

java 設計模式_行為型_23狀態模式

23.狀態模式 Java中的狀態設計模式是一種軟件設計模式&#xff0c;當對象的內部狀態更改時&#xff0c;該模式允許對象更改其行為。狀態設計模式通常用于以下情況&#xff1a;對象取決于其狀態&#xff0c;并且在運行期間必須根據其內部狀態更改其行為。狀態設計模式是許多行為…

Flink CDC MySQL 時區相差 8 小時問題優雅解決方式

Flink CDC MySQL 時區相差 8 小時問題解析 代碼運行環境 Flink 1.15 + FlinkCDC 2.4.0 + jdk1.8 +springboot 2.31、原因分析 Flink CDC 底層使用 Debezium 連接器來捕獲 MySQL 的數據變更,而 Debezium 在解析 MySQL 的 binlog 日志時,默認使用 UTC 時區來處理時間字段。若…

如何在 MX Linux 上安裝 Blender CAD 軟件

Blender 是一款免費且開源的 CAD 軟件,可用于 3D 動畫、建模、動態圖形、紋理處理、電腦游戲、UV 展開等。同時它也是一款專業的開源程序,是商業軟件(如 Maya 或 Cinema 4D)的替代品,支持導入或導出標準格式,如 OBJ、FBX、3DS、PLY 和 STL。Blender 還可以作為視頻編輯軟…

電腦上的.ssh目錄只做什么的

.ssh 目錄的作用和來源 系統自動創建 這個目錄是在你第一次使用SSH相關功能時自動創建的比如第一次執行 ssh 命令連接服務器時或者使用Git通過SSH協議克隆代碼時 主要用途 SSH密鑰存儲 - 存放公鑰/私鑰對已知主機記錄 - known_hosts 文件記錄你連接過的服務器指紋SSH客戶端…

Excel大廠自動化報表實戰(互聯網金融-數據分析周報制作下)

這是Excel大廠自動化報表實戰第四期--互聯網金融-數據分析周報制作下 數據資源已經與這篇博客捆綁&#xff0c;有需要者可以下載通過網盤分享的文件&#xff1a;2.4自動化報表-8月成交數據.xlsx&#xff0c;2.4自動化報表-8月獲客數據.csv等2個文件 鏈接: https://pan.baidu.c…

界面組件DevExpress WPF中文教程:Grid - 節點(Nodes)概述

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

開源統一數據庫管理平臺完全指南:私有化部署方案與技術解析

摘要:面對MySQL、Oracle、Redis等混合數據庫環境,如何實現統一管控?本文深度評測5大開源平臺,附私有化部署方案和性能對比。 一、核心需求場景與技術選型 典型痛點: #mermaid-svg-LuCYYyJjBakpzzFH {font-family:"trebuchet ms",verdana,arial,sans-serif;font…

hot100 -- 14.貪心算法

1.買賣股票的最佳時機 方法&#xff1a; def MaxProfit(prices):max_pro, min_num 0, float(inf)for num in prices:if num < min_num:min_num nummax_pro max(max_pro, num - min_num)return max_pro 2.跳躍游戲 問題&#xff1a; 給你一個非負整數數組 nums &#…

Celery+fastAPI/Flask實現高性能應用

本文在創作過程中借助 AI 工具輔助資料整理與內容優化。圖片來源網絡。 引言 大家好&#xff0c;我是沛哥兒。 在當今的軟件開發領域&#xff0c;異步任務處理和高效的 Web 開發框架是提升應用性能和可擴展性的關鍵因素。Celery 作為一個強大的分布式任務隊列系統&#xff0c;…

【音視頻】PJSIP庫——pjsua命令使用詳解

1、源碼編譯 1)安裝依賴庫 sudo apt install libsrtp2-dev sudo apt install libopus-dev alsa-tools libalsaplayer-dev ffmpeg libalsa* pulseaudio-module-jack sudo apt install jackd libjack-jackd2-dev libjack-dev libsdl2-dev libv4l-dev libavcodec-dev libavde…

Python實例題:圖片批量處理工具

目錄 Python實例題 題目 問題描述 解題思路 關鍵代碼框架 難點分析 Python實例題 題目 圖片批量處理工具 問題描述 開發一個 Python 工具&#xff0c;實現以下功能&#xff1a; 遍歷指定文件夾下的所有圖片文件&#xff08;支持常見格式如 jpg、png、webp&#xff0…

超圖superMap iObjects for Java的Jar使用中遇到的問題

一、 cannot open shared object file: No such file or directory 1. 問題 2. 解決方法 &#xff08;1&#xff09;檢查有沒有配置環境變量 PATH &#xff08;2&#xff09;創建軟連接 ln -s &#xff08;3&#xff09;將主機 /usr/lib64 目錄中的libgomp.so.1 復制到 /pla…

常見的藍牙5.0抗干擾技術和算法

常見的藍牙5.0抗干擾技術和算法&#xff1a; 跳頻擴頻&#xff08;Frequency Hopping Spread Spectrum, FHSS&#xff09; 通過在不同的頻率通道上快速切換數據傳輸&#xff0c;減少與固定頻率干擾源的沖突。 直接序列擴頻&#xff08;Direct Sequence Spread Spectrum, DSSS&…

牛客與Moka深化合作,升級AI面試對接,引領招聘變革

近日&#xff0c;AI 招聘平臺牛客與國內領先的人力資源全模塊平臺 Moka 宣布完成 AI 面試產品的全新對接升級。此次升級實現了從 Moka 到牛客的一鍵互綁&#xff0c;并打通了簡歷出題、風險點提問、優勢技能挖掘等核心功能&#xff0c;為企業提供更加高效智能的面試體驗。 這一…

Vue 3 路由跳轉全面指南(Composition API + <script setup>)

一、前言&#xff1a;為什么要學習 Vue Router&#xff1f; 在單頁面應用(SPA)開發中&#xff0c;路由管理是核心功能之一。Vue Router 作為 Vue.js 官方推薦的路由解決方案&#xff0c;與 Vue.js 深度集成&#xff0c;提供了以下重要功能&#xff1a; 頁面無刷新跳轉&#x…

JavaScript基礎-常用的鍵盤事件

一、前言 在網頁開發中&#xff0c;用戶交互 是非常重要的一環。除了鼠標操作之外&#xff0c;鍵盤事件也是前端開發中最常見的交互方式之一。 JavaScript 提供了多個用于監聽和處理鍵盤輸入的事件&#xff0c;例如 keydown、keyup 和 keypress。掌握這些事件可以幫助我們實現…

解決 Android 項目下載依賴缺失導致的問題

解決 Android 項目下載依賴缺失導致的問題 在項目根目錄下的 build.gradle 文件中增加下面的代碼&#xff1a; buildscript {repositories {...maven {url "https://maven.aliyun.com/repository/jcenter"}maven {url "https://maven.aliyun.com/repository/c…