# 通用代码
**Repository Path**: josnma/universal-code
## Basic Information
- **Project Name**: 通用代码
- **Description**: 通用代码
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-12
- **Last Updated**: 2025-10-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 通用代码--无脑使用
## 1.前端
### 1.1创建vue项目(最新版)
```
npm init vue@lateset
```
### 1.2常用依赖安装
```
# 加速镜像命令(单次使用)
npm install express --registry=https://registry.npmmirror.com
# axios
npm install axios
# Element_plus
npm install element-plus --save
```
### 1.3Element-plus使用流程
```
1.安装依赖
2.main.ts
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
app.use(ElementPlus)
# ElementPlus 组件默认使用英语,配置使用中文
import zhCn from 'element-plus/es/locale/lang/zh-cn'
app.use(ElementPlus, {
locale: zhCn,
})
```
### 1.4跨域配置
```
# vite.config.js
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vite.dev/config/
export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
/**
* 配置代理,解决跨域问题--以下代码仅在开发时使用
*/
server:{
proxy:{
'/api':{ //获取路径中包含了/api的请求
target:'http://localhost:8080',//后台服务所在的源
changeOrigin : true,//修改源
rewrite: (path)=>path.replace(/^\/api/,'')// /api替换为‘’ 空字符串
}
}
}
})
```
## 2.后端
### 2.1常用依赖
```
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.3.1
17
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.mysql
mysql-connector-j
8.0.31
org.mybatis.spring.boot
mybatis-spring-boot-starter
3.0.3
org.springframework.boot
spring-boot-starter-data-redis
org.projectlombok
lombok
org.springframework.boot
spring-boot-starter-validation
com.auth0
java-jwt
4.4.0
com.github.pagehelper
pagehelper-spring-boot-starter
1.4.6
com.aliyun.oss
aliyun-sdk-oss
3.17.4
javax.xml.bind
jaxb-api
2.3.1
javax.activation
activation
1.1.1
org.glassfish.jaxb
jaxb-runtime
2.3.3
org.springframework.boot
spring-boot-maven-plugin
```
### 2.2applications.yml
```
server:
port: 8123
servlet:
context-path: /api
spring:
application:
name: chunqiu-picture-backend
# 数据库配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/chunqiu_picture
username: root
password: 123456
servlet:
multipart:
max-file-size: 10MB
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
# 仅在开发环境开启日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: isDelete # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
# 接口文档配置
knife4j:
enable: true
openapi:
title: "接口文档"
version: 1.0
group:
default:
api-rule: package
api-rule-resources:
- com.josn.chunqiupicturebackend.controller
# 对象存储配置(需要从腾讯云获取)
cos:
client:
host: xx
secretId: xx
secretKey: xx
region: xx
bucket: xx
```
### 2.3跨域配置类
```
# CorsConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//解决前后端为同一台机器时的跨域问题
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 覆盖所有请求
registry.addMapping("/**")
// 允许发送 Cookie
.allowCredentials(true)
// 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突)
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.exposedHeaders("*");
}
}
```
### 2.4拦截器配置类
使用方法:LoginInterceptor.java 和 WebConfig.java搭配使用
```
# WebConfig.java
import com.josn.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/register","/user/login");
}
}
```
```
# LoginInterceptor.java
import com.josn.utils.JwtUtil;
import com.josn.utils.ThreadLocalUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.Map;
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception{
//获取令牌
String token = request.getHeader("Authorization");
//验证令牌
try {
//从redis中获取相同的token
ValueOperations operations=stringRedisTemplate.opsForValue();
String redisToken=operations.get(token);
if (redisToken==null){
throw new RuntimeException();
}
Map claims= JwtUtil.parseToken(token);
//把业务数据存储到ThreadLocal
ThreadLocalUtil.set(claims);
//放行
return true;
}catch (Exception e){
//http响应状态码为401
response.setStatus(401);
//拦截
return false;
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//清空ThreadLocal中的数据
ThreadLocalUtil.remove();
}
}
```
### 2.5用户角色常量类
```
# UserConstant.java
/**
* 用户常量
*/
public interface UserConstant {
/**
* 用户登录态键
*/
String USER_LOGIN_STATE = "user_login";
// region 权限
/**
* 默认角色
*/
String DEFAULT_ROLE = "user";
/**
* 管理员角色
*/
String ADMIN_ROLE = "admin";
// endregion
}
```
### 2.6错误码枚举类
```
# ErrorCode.java
import lombok.Getter;
@Getter
public enum ErrorCode {
SUCCESS(0, "ok"),
PARAMS_ERROR(40000, "请求参数错误"),
NOT_LOGIN_ERROR(40100, "未登录"),
NO_AUTH_ERROR(40101, "无权限"),
NOT_FOUND_ERROR(40400, "请求数据不存在"),
FORBIDDEN_ERROR(40300, "禁止访问"),
SYSTEM_ERROR(50000, "系统内部异常"),
OPERATION_ERROR(50001, "操作失败");
/**
* 状态码
*/
private final int code;
/**
* 信息
*/
private final String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
}
```
### 2.7结果类
```
# Result.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//统一响应结果
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result {
private Integer code;//业务状态码 0-成功 1-失败
private String message;//提示信息
private T data;//响应数据
//快速返回操作成功响应结果(带响应数据)
public static Result success(E data) {
return new Result<>(0, "操作成功", data);
}
//快速返回操作成功响应结果
public static Result success() {
return new Result(0, "操作成功", null);
}
public static Result error(String message) {
return new Result(1, message, null);
}
}
```
### 2.8ThreadLocal 工具类
```
# ThreadLocalUtil.java
import java.util.HashMap;
import java.util.Map;
/**
* ThreadLocal 工具类
*/
@SuppressWarnings("all")
public class ThreadLocalUtil {
//提供ThreadLocal对象
private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
//根据键获取值
public static T get(){
return (T) THREAD_LOCAL.get();
}
//存储键值对
public static void set(Object value){
THREAD_LOCAL.set(value);
}
//清除ThreadLocal 防止内存泄漏
public static void remove(){
THREAD_LOCAL.remove();
}
}
```
### 2.9JWT工具类
```
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtil {
private static final String KEY = "hongyu";
//接收业务数据,生成token并返回
public static String genToken(Map claims) {
return JWT.create()
.withClaim("claims", claims)
.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60))//设置失效时间为1小时
.sign(Algorithm.HMAC256(KEY));
}
//接收token,验证token,并返回业务数据
public static Map parseToken(String token) {
return JWT.require(Algorithm.HMAC256(KEY))
.build()
.verify(token)
.getClaim("claims")
.asMap();
}
}
```
### 2.10阿里云oss配置类
```
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.InputStream;
public class AliOssUtil {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
private static final String ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
private static final String ACCESS_KEY_ID="LTAI5tPuAUyCajB5Gz8BPLZh";
private static final String ACCESS_KEY_SECRET="nqJtPMQ9v3Df3u936OdzAlS8ft7Cco";
// 填写Bucket名称,例如examplebucket。
private static final String BUCKET_NAME = "bigevent-mybatis";
public static String uploadFile(String objectName, InputStream in) throws Exception {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);
String url="";
try {
// 填写字符串。
String content = "Hello OSS,你好世界";
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName,in);
// 上传字符串。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// url组成:https://bucket节点名称.区域节点/objectName
url="https://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url;
}
}
```
### 2.11腾讯云cos配置类
```
```
## 3.密钥配置
### 3.1腾讯云cos密钥配置
```
```
### 3.2阿里云密钥配置
```
```