网站建设和管理情况调查表,企业邮箱哪个好,网上注册公司流程及资料,天津定制网站建设公司智能法律文书系统 - 后端项目
项目概览
技术栈: Spring Boot JWT MVC核心功能: 用户认证、法律知识问答、法律文书处理与摘要生成、预测报告生成统一响应: common.Result 封装安全认证: JWT 拦截器校验 项目结构树
con.example.demo ├── common │ ├── Constants.j…智能法律文书系统 - 后端项目
项目概览
技术栈: Spring Boot JWT MVC核心功能: 用户认证、法律知识问答、法律文书处理与摘要生成、预测报告生成统一响应: common.Result 封装安全认证: JWT 拦截器校验 项目结构树
con.example.demo ├── common │ ├── Constants.java # 全局常量 │ └── Result.java # 统一响应封装 ├── config │ └── WebConfig.java # Web配置拦截器/跨域 ├── controller │ ├── LoginController.java # 登录API │ ├── QARecordController.java # 问答记录管理 │ ├── WendaController.java # 问答功能 │ ├── WenShuController.java # 文书处理 │ └── YuceController.java # 预测功能 ├── exception │ ├── ServiceException.java # 自定义业务异常 │ └── ServiceExceptionHandler.java # 全局异常处理器 ├── interceptor │ └── LoginCheckInterceptor.java # 登录校验拦截器 ├── pojo │ ├── dto │ │ ├── Dialog.java # 对话DTO │ │ └── LoginRequest.java # 登录请求DTO │ └── User.java # 用户实体 ├── repository │ ├── LoginRepository.java # 登录数据访问 │ └── QARecordRepository.java # 问答记录数据访问 ├── service │ ├── impl │ │ ├── LoginServiceImpl.java # 登录服务实现 │ │ └── QARecordServiceImpl.java # 问答服务实现 │ ├── LoginService.java # 登录服务接口 │ └── QARecordService.java # 问答服务接口 ├── utils │ └── JwtUtils.java # JWT令牌工具 ├── DemoApplication.java # SpringBoot启动类 └── pom.xml # Maven依赖配置 核心模块说明
1. 控制层 (controller)
控制器功能说明LoginController用户登录/登出/注册QARecordControllerAI问答记录的增删改查WendaController智能问答核心业务WenShuController法律文书生成与分析YuceController预测报告生成与结果分析
2. 服务层 (service)
接口/实现功能说明LoginService定义认证逻辑接口QARecordService定义问答记录操作接口LoginServiceImpl实现登录校验/JWT生成QARecordServiceImpl实现问答记录管理逻辑
3. 数据层 (repository)
数据访问对象功能说明LoginRepository用户数据CRUD操作QARecordRepository问答记录数据CRUD操作
4. 安全体系
组件功能说明JwtUtils生成/解析JWT令牌LoginCheckInterceptor拦截非法请求并验证Token有效性WebConfig注册拦截器并配置跨域规则
5. 全局处理
组件功能说明ServiceException自定义业务异常(如: “用户不存在”)ServiceExceptionHandler捕获所有异常并返回统一格式Result标准化响应格式: {code, msg, data}Constants定义状态码/错误消息等常量 关键技术点
认证流程 #mermaid-svg-2ch819cXHEBMBDQO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2ch819cXHEBMBDQO .error-icon{fill:#552222;}#mermaid-svg-2ch819cXHEBMBDQO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2ch819cXHEBMBDQO .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-2ch819cXHEBMBDQO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2ch819cXHEBMBDQO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2ch819cXHEBMBDQO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2ch819cXHEBMBDQO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2ch819cXHEBMBDQO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2ch819cXHEBMBDQO .marker.cross{stroke:#333333;}#mermaid-svg-2ch819cXHEBMBDQO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2ch819cXHEBMBDQO .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2ch819cXHEBMBDQO text.actortspan{fill:black;stroke:none;}#mermaid-svg-2ch819cXHEBMBDQO .actor-line{stroke:grey;}#mermaid-svg-2ch819cXHEBMBDQO .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-2ch819cXHEBMBDQO .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-2ch819cXHEBMBDQO #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-2ch819cXHEBMBDQO .sequenceNumber{fill:white;}#mermaid-svg-2ch819cXHEBMBDQO #sequencenumber{fill:#333;}#mermaid-svg-2ch819cXHEBMBDQO #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-2ch819cXHEBMBDQO .messageText{fill:#333;stroke:#333;}#mermaid-svg-2ch819cXHEBMBDQO .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2ch819cXHEBMBDQO .labelText,#mermaid-svg-2ch819cXHEBMBDQO .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-2ch819cXHEBMBDQO .loopText,#mermaid-svg-2ch819cXHEBMBDQO .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-2ch819cXHEBMBDQO .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-2ch819cXHEBMBDQO .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-2ch819cXHEBMBDQO .noteText,#mermaid-svg-2ch819cXHEBMBDQO .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-2ch819cXHEBMBDQO .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2ch819cXHEBMBDQO .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2ch819cXHEBMBDQO .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2ch819cXHEBMBDQO .actorPopupMenu{position:absolute;}#mermaid-svg-2ch819cXHEBMBDQO .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-2ch819cXHEBMBDQO .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2ch819cXHEBMBDQO .actor-man circle,#mermaid-svg-2ch819cXHEBMBDQO line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-2ch819cXHEBMBDQO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Client LoginController LoginServiceImpl LoginRepository JwtUtils 其他API LoginCheckInterceptor 提交用户名密码 调用认证服务 查询用户数据 生成Token 返回Token 携带Token请求 校验Token有效性 通过/拒绝 Client LoginController LoginServiceImpl LoginRepository JwtUtils 其他API LoginCheckInterceptor 异常处理机制
ControllerAdvice
public class ServiceExceptionHandler {/*** ExceptionHandler相当于controller的RequestMapping* 如果抛出的的是ServiceException则调用该方法* param se 业务异常* return*/ExceptionHandler(ServiceException.class)ResponseBodypublic Result handle(ServiceException se){return Result.error(se.getCode(),se.getMessage());}
}统一响应格式
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 };}
}
项目依赖详见 pom.xml 全局常量配置: common.Constants
法律智能系统 - 前端项目
技术栈概览
核心框架: Vue 3状态管理: Vuex路由管理: Vue RouterHTTP库: AxiosUI适配: 移动端兼容方案构建工具: Webpack Vue CLI 项目结构树
LEGAL/ ├── public/ # 静态资源 │ ├── favicon.ico # 网站图标 │ └── index.html # 主入口HTML ├── src/ # 核心源码 │ ├── assets/ # 静态资源 │ ├── coms/ # 公共组件 (疑似components缩写) │ ├── css/ # 全局样式 │ │ └── k.css # 自定义样式 │ ├── login/ # 登录模块工具 │ │ ├── axios/ # HTTP请求封装 │ │ │ ├── awaitapi.js # API异步处理 │ │ │ └── request.js # 请求拦截器 │ │ └── components/login/ │ │ └── Login_Auth.vue # 登录认证组件 │ ├── mixin/ # 混入逻辑 │ │ └── index.js # 公共方法复用 │ ├── router/ # 路由管理 │ │ └── index.js # 路由配置 │ ├── store/ # 状态管理 │ │ ├── index.js # Vuex主仓库 │ │ └── mobile.js # 移动端状态管理 │ ├── views/ # 页面视图 │ │ ├── home/ # 首页 │ │ │ ├── Home.vue # 首页组件 │ │ │ └── HomeView.vue # 首页视图 │ │ ├── login/ # 登录页 │ │ │ └── Login.vue │ │ ├── register/ # 注册页 │ │ │ └── register.vue │ │ ├── souc/ # 检索模块 │ │ │ └── souc.vue │ │ ├── wenda/ # 智能问答 │ │ │ ├── history.vue # 问答记录历史会话 │ │ │ └── wenda.vue # 问答主界面 │ │ ├── wenshu/ # 法律文书处理 │ │ │ ├── history1.vue # 法律文书历史会话 │ │ │ └── wenshu.vue # 法律文书生成 │ │ └── yuce/ # 预测分析 │ │ └── yuce.vue # 预测页面 │ ├── App.vue # 根组件 │ └── main.js # 应用入口 ├── .browserslistrc # 浏览器兼容配置 ├── .eslintrc.js # ESLint规则 ├── babel.config.js # Babel配置 ├── vue.config.js # Vue CLI配置 ├── webpack.base.config.js # Webpack基础配置 ├── package.json # 依赖管理 └── README.md # 项目说明 核心模块说明
1. 页面视图 (views)
页面文件功能说明首页Home.vue系统主界面登录Login.vue用户登录注册register.vue用户注册搜索souc.vue全局搜索功能问答wenda.vue智能问答交互界面问答历史会话history.vue用户问答记录查询法律文书摘要生成wenshu.vue法律文书摘要生成界面法律文书摘要历史会话history1.vue法律文书摘要历史会话查询预测分析yuce.vue数据预测分析界面
2. 请求处理 (axios)
文件功能说明request.jsAxios实例封装拦截器/基地址awaitapi.js异步API统一管理
3. 状态管理 (store)
文件功能说明index.js全局状态管理用户信息等mobile.js移动端适配状态管理
4. 路由配置 (router)
文件功能说明index.js路由定义/懒加载/导航守卫
5. 公共资源
目录/文件功能说明css/k.css核心自定义样式mixin复用逻辑如表单验证assets静态资源图片/图标 关键技术点
请求封装 (request.js)
import axios from axiosconst 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;charsetutf-8;if (!(config.data instanceof FormData)) {config.headers[Content-Type] application/json;charsetutf-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
路由守卫逻辑 (router/index.js)
import Vue from vue
import VueRouter from vue-routerconst Home () import(/views/home/Home)
const Login () import(/views/login/Login)
const HomeView () import(/views/home/HomeView)
const wenshu () import(/views/wenshu/wenshu)
const yuce () import(/views/yuce/yuce)
const wenda () import(/views/wenda/wenda)
const history () import(/views/wenda/history)
const history1 () import(/views/wenshu/history1)
const souc () import(/views/souc/souc)
const zhuc () import(/views/register/register)Vue.use(VueRouter)
const routes [{path: /,component: Login},{name: 19,path: /zhuc,component: zhuc},{path: /home,component: Home,children: [//首页{ path: /home, name: 0, redirect: /homeview },{name: 1,path: /homeview,component: HomeView},{name: 12,path: /wenshu,component: wenshu},{name: 13,path: /yuce,component: yuce},{name: 14,path: /wenda,component: wenda},{name: 15,path: /lishi,component: history},{name: 16,path: /lishi1,component: history1},{name: 18,path: /souc,component: souc},]},
]const router new VueRouter({mode: history,// base: process.env.BASE_URL,routes
})export default router
移动端适配方案 (store/mobile.js)
const mobile {namespaced: true,state: {name:,},getters: {},mutations: {setname(state,e){console.log(e);state.namee.name}},actions: {}
}
export default mobile;启动说明
安装依赖
npm install开发模式
npm run serve生产构建
npm run build环境配置
在 .env 文件中配置后端地址
VUE_APP_BASE_API http://your-backend-api.com
详细配置参考 vue.config.js 和 package.json 组件规范参考 components/login/Login_Auth.vue