adsfasdfas

This commit is contained in:
2025-12-18 11:21:31 +08:00
parent 9c47f313b7
commit 26a6152ecc
81 changed files with 6160 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
package com.rczn.domain;
import java.time.LocalDateTime;
public class BaseBean {
private Long id;
private Long createId;
private LocalDateTime createTime;
private Long updateId;
private LocalDateTime updateTime;
// 关键修改Boolean → boolean基本类型默认值 false无 null 问题)
private boolean delSign = false;
private String remark;
private LocalDateTime startTime;
private LocalDateTime endTime;
// 无参构造器、全参构造器(同步修改 delSign 类型)
public BaseBean() { }
public BaseBean(Long id, Long createId, LocalDateTime createTime, Long updateId, LocalDateTime updateTime, boolean delSign, String remark) {
this.id = id;
this.createId = createId;
this.createTime = createTime;
this.updateId = updateId;
this.updateTime = updateTime;
this.delSign = delSign; // 类型同步为 boolean
this.remark = remark;
}
// getter/setter同步修改 delSign 类型)
public boolean isDelSign() { return delSign; } // boolean 类型 getter 是 isXXX而非 getXXX
public void setDelSign(boolean delSign) { this.delSign = delSign; }
// 其他字段 getter/setter 保持不变
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getCreateId() { return createId; }
public void setCreateId(Long createId) { this.createId = createId; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public Long getUpdateId() { return updateId; }
public void setUpdateId(Long updateId) { this.updateId = updateId; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public LocalDateTime getStartTime() {
return startTime;
}
public void setStartTime(LocalDateTime startTime) {
this.startTime = startTime;
}
public LocalDateTime getEndTime() {
return endTime;
}
public void setEndTime(LocalDateTime endTime) {
this.endTime = endTime;
}
}

View File

@@ -0,0 +1,28 @@
package com.rczn.domain;
import java.util.List;
//分页返回结果对象
public class PageBean <T>{
private Long total;//总条数
private List<T> items;//当前页数据集合
public PageBean() {
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}

View File

@@ -0,0 +1,55 @@
package com.rczn.domain;
//统一响应结果
public class Result<T> {
private Integer code;//业务状态码 0-成功 1-失败
private String message;//提示信息
private T data;//响应数据
//快速返回操作成功响应结果(带响应数据)
public static <E> Result<E> success(E data) {
return new Result<>(0, "操作成功", data);
}
public Result() {
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
//快速返回操作成功响应结果
public static Result<Void> success() {
return new Result<Void>(0, "操作成功", null);
}
public static Result<Void> error(String message) {
return new Result<Void>(1, message, null);
}
public Result(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
}

View File

@@ -0,0 +1,37 @@
package com.rczn.interceptors;
import com.rczn.utils.JwtUtil;
import com.rczn.utils.ThreadLocalUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.Map;
//@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
String token = request.getHeader("Authorization");
Map<String, Object> claims = JwtUtil.parseToken(token);
//保存用户数据到ThreadLocalUtil
ThreadLocalUtil.set(claims);
//放行
return true;
}catch (Exception e){
//登录失败,抛异常,状态码401
response.setStatus(401);
//不放行
return false;
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//清除ThreadLocalUtil
ThreadLocalUtil.remove();
}
}

View File

@@ -0,0 +1,30 @@
package com.rczn.utils;
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 = "itheima";
//接收业务数据,生成token并返回
public static String genToken(Map<String, Object> claims) {
return JWT.create()
.withClaim("claims", claims)
.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
.sign(Algorithm.HMAC256(KEY));
}
//接收token,验证token,并返回业务数据
public static Map<String, Object> parseToken(String token) {
return JWT.require(Algorithm.HMAC256(KEY))
.build()
.verify(token)
.getClaim("claims")
.asMap();
}
}

View File

@@ -0,0 +1,73 @@
package com.rczn.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Util {
/**
* 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
*/
protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
protected static MessageDigest messagedigest = null;
static {
try {
messagedigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex) {
System.err.println(Md5Util.class.getName() + "初始化失败MessageDigest不支持MD5Util。");
nsaex.printStackTrace();
}
}
/**
* 生成字符串的md5校验值
*
* @param s
* @return
*/
public static String getMD5String(String s) {
return getMD5String(s.getBytes());
}
/**
* 判断字符串的md5校验码是否与一个已知的md5码相匹配
*
* @param password 要校验的字符串
* @param md5PwdStr 已知的md5校验码
* @return
*/
public static boolean checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
public static String getMD5String(byte[] bytes) {
messagedigest.update(bytes);
return bufferToHex(messagedigest.digest());
}
private static String bufferToHex(byte bytes[]) {
return bufferToHex(bytes, 0, bytes.length);
}
private static String bufferToHex(byte bytes[], int m, int n) {
StringBuffer stringbuffer = new StringBuffer(2 * n);
int k = m + n;
for (int l = m; l < k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
return stringbuffer.toString();
}
private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>>
// 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
stringbuffer.append(c0);
stringbuffer.append(c1);
}
}

View File

@@ -0,0 +1,26 @@
package com.rczn.utils;
/**
* ThreadLocal 工具类
*/
@SuppressWarnings("all")
public class ThreadLocalUtil {
//提供ThreadLocal对象,
private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
//根据键获取值
public static <T> 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();
}
}

View File

@@ -0,0 +1 @@
##spring.application.name=rczn-common