diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/PigSaOAuth2ServerConfiguration.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/PigSaOAuth2ServerConfiguration.java index aacdd9b18395de50c3f10cc160b0837f3795b4ce..c1cf77ca92b1594f13cd425f5c460ad247ec9b6a 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/PigSaOAuth2ServerConfiguration.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/PigSaOAuth2ServerConfiguration.java @@ -1,20 +1,18 @@ package com.pig4cloud.pig.auth.config; -/** - * @author lengleng - * @date 2024/7/22 - */ +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; + +import com.pig4cloud.pig.auth.support.SaOAuth2TokenDataGenerateImpl; +import com.pig4cloud.pig.auth.support.handler.ConfirmViewHandler; +import com.pig4cloud.pig.auth.support.handler.NoLoginViewHandler; +import com.pig4cloud.pig.auth.support.handler.PasswordLoginHandler; import cn.dev33.satoken.oauth2.SaOAuth2Manager; import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig; -import com.pig4cloud.pig.auth.support.SaOAuth2TokenDataGenerateImpl; -import com.pig4cloud.pig.auth.support.handle.ConfirmViewHandle; -import com.pig4cloud.pig.auth.support.handle.NoLoginViewHandle; -import com.pig4cloud.pig.auth.support.handle.PasswordLoginHandle; +import cn.dev33.satoken.oauth2.strategy.SaOAuth2Strategy; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; /** * Pig SA OAuth2 服务器配置 @@ -30,20 +28,20 @@ public class PigSaOAuth2ServerConfiguration { * 设置 SA OAuth2 配置 * @param cfg cfg * @param confirmViewHandle 确认视图 - * @param passwordLoginHandle 密码登录 - * @param noLoginViewHandle 无登录视图 + * @param passwordLoginHandler 密码登录 + * @param noLoginViewHandler 无登录视图 */ @Autowired @SneakyThrows - public void setSaOAuth2Config(SaOAuth2ServerConfig cfg, ConfirmViewHandle confirmViewHandle, - PasswordLoginHandle passwordLoginHandle, NoLoginViewHandle noLoginViewHandle) { + public void setSaOAuth2Config(SaOAuth2ServerConfig cfg, ConfirmViewHandler confirmViewHandle, + PasswordLoginHandler passwordLoginHandler, NoLoginViewHandler noLoginViewHandler) { // 配置登录页面 - cfg.notLoginView = noLoginViewHandle; + SaOAuth2Strategy.instance.notLoginView = noLoginViewHandler; // 配置登录处理逻辑 - cfg.doLoginHandle = passwordLoginHandle; + SaOAuth2Strategy.instance.doLoginHandle = passwordLoginHandler; // 配置授权页面 - cfg.confirmView = confirmViewHandle; + SaOAuth2Strategy.instance.confirmView = confirmViewHandle; // 注入自定义的 oauth2 数据生成处理 SaOAuth2Manager.setDataGenerate(new SaOAuth2TokenDataGenerateImpl()); diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java index cfb684273f511771e825e70afff4ac588451ca0c..dd1709c31c85409f8fb89ff7626345adf1dc7233 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java @@ -16,6 +16,32 @@ package com.pig4cloud.pig.auth.endpoint; +import java.net.URI; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pig.auth.support.handler.NoLoginViewHandler; +import com.pig4cloud.pig.common.core.constant.CommonConstants; +import com.pig4cloud.pig.common.core.constant.SecurityConstants; +import com.pig4cloud.pig.common.core.util.R; +import com.pig4cloud.pig.common.core.util.WebUtils; +import com.pig4cloud.pig.common.security.annotation.Inner; + import cn.dev33.satoken.SaManager; import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.oauth2.SaOAuth2Manager; @@ -29,29 +55,10 @@ import cn.dev33.satoken.util.SaResult; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.pig4cloud.pig.auth.support.handle.NoLoginViewHandle; -import com.pig4cloud.pig.common.core.constant.CommonConstants; -import com.pig4cloud.pig.common.core.constant.SecurityConstants; -import com.pig4cloud.pig.common.core.util.R; -import com.pig4cloud.pig.common.core.util.WebUtils; -import com.pig4cloud.pig.common.security.annotation.Inner; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.net.URI; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; /** * pig 令牌终端节点 @@ -59,7 +66,6 @@ import java.util.Objects; * @author lengleng * @date 2024/11/10 */ -@Slf4j @RestController @RequestMapping @RequiredArgsConstructor @@ -67,7 +73,7 @@ public class PigTokenEndpoint { private final StringRedisTemplate stringRedisTemplate; - private final NoLoginViewHandle noLoginViewHandle; + private final NoLoginViewHandler noLoginViewHandler; /** * 密码模式、刷新模型、客户端模式获取 token @@ -123,7 +129,7 @@ public class PigTokenEndpoint { // 如果未登录,跳转到登录页面 Map model = new HashMap<>(); model.put("error", saResult.getMsg()); - return ResponseEntity.ok(noLoginViewHandle.get(model)); + return ResponseEntity.ok(noLoginViewHandler.get(model)); } /** @@ -150,7 +156,7 @@ public class PigTokenEndpoint { // 如果未登录,跳转到登录页面 Map model = new HashMap<>(); model.put("error", saResult.getMsg()); - return ResponseEntity.ok(noLoginViewHandle.get(model)); + return ResponseEntity.ok(noLoginViewHandler.get(model)); } /** @@ -160,7 +166,7 @@ public class PigTokenEndpoint { @RequestMapping("/oauth2/logout") public ResponseEntity oauth2Logout() { StpUtil.logout(); - return ResponseEntity.ok(noLoginViewHandle.get().toString()); + return ResponseEntity.ok(noLoginViewHandler.get().toString()); } /** @@ -222,7 +228,7 @@ public class PigTokenEndpoint { SaOAuth2Dao saOAuth2Dao = SaOAuth2Manager.getDao(); if (StrUtil.isNotBlank(username)) { // 获取用户的所有 token - String accessTokenSaveKey = saOAuth2Dao.splicingAccessTokenIndexKey("*", username); + String accessTokenSaveKey = saOAuth2Dao.splicingAccessTokenRSDValue("*", username); List keyList = saTokenDao.searchData(accessTokenSaveKey, StrUtil.EMPTY, current, size, false); List> accessTokenModels = keyList.stream() diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomSaTokenListener.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomSaTokenListener.java index e2204bb188243ae15afb7a157895a1a43d68d41e..88dc0f11ba329076645cb04373b877a6387cd182 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomSaTokenListener.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomSaTokenListener.java @@ -1,28 +1,28 @@ package com.pig4cloud.pig.auth.support; -/** - * @author lengleng - * @date 2024/7/23 - */ +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; -import cn.dev33.satoken.context.SaHolder; -import cn.dev33.satoken.listener.SaTokenListener; -import cn.dev33.satoken.stp.SaLoginModel; -import cn.hutool.extra.servlet.JakartaServletUtil; -import cn.hutool.extra.spring.SpringUtil; import com.pig4cloud.pig.admin.api.entity.SysLog; import com.pig4cloud.pig.admin.api.feign.RemoteLogService; import com.pig4cloud.pig.common.core.constant.CommonConstants; import com.pig4cloud.pig.common.core.util.WebUtils; import com.pig4cloud.pig.common.log.util.LogTypeEnum; + +import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.listener.SaTokenListener; +import cn.dev33.satoken.stp.parameter.SaLoginParameter; +import cn.hutool.extra.servlet.JakartaServletUtil; +import cn.hutool.extra.spring.SpringUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.stereotype.Component; /** * 用户行为监听 + * + * @author lengleng + * @date 2024/7/23 */ @Slf4j @Component @@ -39,7 +39,7 @@ public class CustomSaTokenListener implements SaTokenListener { * @param loginModel 登录参数 */ @Override - public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) { + public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginModel) { log.info("用户登录成功, loginType: {}, loginId: {}, tokenValue: {}, loginModel: {}", loginType, loginId, tokenValue, loginModel); @@ -163,7 +163,7 @@ public class CustomSaTokenListener implements SaTokenListener { * @param timeout 续期时间 */ @Override - public void doRenewTimeout(String tokenValue, Object loginId, long timeout) { + public void doRenewTimeout(String loginType, Object loginId, String tokenValue, long timeout) { } diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2ClientDataLoaderImpl.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2ClientDataLoaderImpl.java index 7cc0b263902a37bf356e0ec426a21986e5c48f1a..9010cbc65ff5eaf4f39ddd06b15f32b6dbb111e9 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2ClientDataLoaderImpl.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2ClientDataLoaderImpl.java @@ -1,20 +1,21 @@ package com.pig4cloud.pig.auth.support; -import cn.dev33.satoken.oauth2.data.loader.SaOAuth2DataLoader; -import cn.dev33.satoken.oauth2.data.model.loader.SaClientModel; -import cn.hutool.core.util.StrUtil; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + import com.pig4cloud.pig.admin.api.entity.SysOauthClientDetails; import com.pig4cloud.pig.admin.api.feign.RemoteClientDetailsService; import com.pig4cloud.pig.common.core.constant.CacheConstants; import com.pig4cloud.pig.common.core.util.R; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import cn.dev33.satoken.oauth2.data.loader.SaOAuth2DataLoader; +import cn.dev33.satoken.oauth2.data.model.loader.SaClientModel; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; /** * 加载 OAuth2 客户端相关数据 @@ -22,7 +23,6 @@ import java.util.Objects; * @author lengleng * @date 2024/11/11 */ -@Slf4j @Service @RequiredArgsConstructor public class SaOAuth2ClientDataLoaderImpl implements SaOAuth2DataLoader { diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2TokenDataGenerateImpl.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2TokenDataGenerateImpl.java index 53df4c019253a837ad5866cf5ee350ae147dc85f..3c6ea5cb50dcbd35df2f2c11d411c98e7af5f4a3 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2TokenDataGenerateImpl.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/SaOAuth2TokenDataGenerateImpl.java @@ -1,7 +1,12 @@ package com.pig4cloud.pig.auth.support; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Consumer; + import cn.dev33.satoken.SaManager; import cn.dev33.satoken.oauth2.SaOAuth2Manager; +import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig; import cn.dev33.satoken.oauth2.consts.SaOAuth2Consts; import cn.dev33.satoken.oauth2.dao.SaOAuth2Dao; import cn.dev33.satoken.oauth2.data.convert.SaOAuth2DataConverter; @@ -16,13 +21,11 @@ import cn.dev33.satoken.oauth2.exception.SaOAuth2AuthorizationCodeException; import cn.dev33.satoken.oauth2.exception.SaOAuth2RefreshTokenException; import cn.dev33.satoken.oauth2.strategy.SaOAuth2Strategy; -import java.util.LinkedHashMap; - /** * Token 方法逻辑;重写避免发放token 错误 * - * @author lengleng - * @date 2024/11/11 + * @author weimeilayer@gmail.com ✨ + * @date 💓💕2025年6月6日🐬🐇 💓💕 */ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultImpl { @@ -43,7 +46,7 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm // 生成新Code String codeValue = SaOAuth2Strategy.instance.createCodeValue.execute(ra.clientId, ra.loginId, ra.scopes); - CodeModel cm = new CodeModel(codeValue, ra.clientId, ra.scopes, ra.loginId, ra.redirectUri); + CodeModel cm = new CodeModel(codeValue, ra.clientId, ra.scopes, ra.loginId, ra.redirectUri, null); // 保存新Code dao.saveCode(cm); @@ -63,29 +66,43 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm SaOAuth2Dao dao = SaOAuth2Manager.getDao(); SaOAuth2DataConverter dataConverter = SaOAuth2Manager.getDataConverter(); - + SaOAuth2ServerConfig config = SaOAuth2Manager.getServerConfig(); // 1、先校验 CodeModel cm = dao.getCode(code); SaOAuth2AuthorizationCodeException.throwBy(cm == null, "无效 code: " + code, code, SaOAuth2ErrorCode.CODE_30110); // 2、当设置不允许同时在线的时,删除 旧Token if (!SaManager.getConfig().getIsConcurrent()) { - dao.deleteAccessToken(dao.getAccessTokenValue(cm.clientId, cm.loginId)); - dao.deleteRefreshToken(dao.getRefreshTokenValue(cm.clientId, cm.loginId)); + // 获取当前用户的所有AccessToken + List accessTokenList = dao.getAccessTokenValueList_FromAdjustAfter(cm.clientId, cm.loginId); + // 获取当前用户的所有RefreshToken + List refreshTokenList = dao.getRefreshTokenValueList_FromAdjustAfter(cm.clientId, cm.loginId); + + // 删除所有AccessToken + for (String accessToken : accessTokenList) { + dao.deleteAccessToken(accessToken); + dao.deleteAccessTokenIndex_BySingleData(cm.clientId, cm.loginId, accessToken); + } + + // 删除所有RefreshToken + for (String refreshToken : refreshTokenList) { + dao.deleteRefreshToken(refreshToken); + dao.deleteRefreshTokenIndex_BySingleData(cm.clientId, cm.loginId, refreshToken); + } } // 3、生成token - AccessTokenModel at = dataConverter.convertCodeToAccessToken(cm); + AccessTokenModel at = dataConverter.convertCodeToAccessToken(cm, config.getAccessTokenTimeout()); SaOAuth2Strategy.instance.workAccessTokenByScope.accept(at); - RefreshTokenModel rt = dataConverter.convertAccessTokenToRefreshToken(at); + RefreshTokenModel rt = dataConverter.convertAccessTokenToRefreshToken(at, config.getRefreshTokenTimeout()); at.refreshToken = rt.refreshToken; at.refreshExpiresTime = rt.expiresTime; // 4、保存token dao.saveAccessToken(at); - dao.saveAccessTokenIndex(at); + dao.saveAccessTokenIndex_AndAdjust(at, SaOAuth2Manager.getServerConfig().getMaxAccessTokenCount()); dao.saveRefreshToken(rt); - dao.saveRefreshTokenIndex(rt); + dao.saveRefreshTokenIndex_AndAdjust(rt, SaOAuth2Manager.getServerConfig().getMaxRefreshTokenCount()); // 5、删除此Code dao.deleteCode(code); @@ -104,6 +121,8 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm public AccessTokenModel refreshAccessToken(String refreshToken) { SaOAuth2Dao dao = SaOAuth2Manager.getDao(); + SaOAuth2DataConverter dataConverter = SaOAuth2Manager.getDataConverter(); + SaOAuth2ServerConfig config = SaOAuth2Manager.getServerConfig(); // 获取 Refresh-Token 信息 RefreshTokenModel rt = dao.getRefreshToken(refreshToken); @@ -116,25 +135,33 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm // 删除旧 Refresh-Token if (!SaManager.getConfig().getIsConcurrent()) { dao.deleteRefreshToken(rt.refreshToken); + dao.deleteRefreshTokenIndex_BySingleData(rt.clientId, rt.loginId, rt.refreshToken); } // 创建并保存新的 Refresh-Token - rt = SaOAuth2Manager.getDataConverter().convertRefreshTokenToRefreshToken(rt); + rt = dataConverter.convertRefreshTokenToRefreshToken(rt, config.getRefreshTokenTimeout()); dao.saveRefreshToken(rt); - dao.saveRefreshTokenIndex(rt); + dao.saveRefreshTokenIndex_AndAdjust(rt, config.getMaxRefreshTokenCount()); } // 删除旧 Access-Token if (!SaManager.getConfig().getIsConcurrent()) { - dao.deleteAccessToken(dao.getAccessTokenValue(rt.clientId, rt.loginId)); + List accessTokenList = dao.getAccessTokenValueList_FromAdjustAfter(rt.clientId, rt.loginId); + for (String atValue : accessTokenList) { + dao.deleteAccessToken(atValue); + dao.deleteAccessTokenIndex_BySingleData(rt.clientId, rt.loginId, atValue); + } } // 生成新 Access-Token - AccessTokenModel at = SaOAuth2Manager.getDataConverter().convertRefreshTokenToAccessToken(rt); + AccessTokenModel at = dataConverter.convertRefreshTokenToAccessToken(rt, config.getAccessTokenTimeout()); + SaOAuth2Strategy.instance.workAccessTokenByScope.accept(at); + at.refreshToken = rt.refreshToken; + at.refreshExpiresTime = rt.expiresTime; // 保存新 Access-Token dao.saveAccessToken(at); - dao.saveAccessTokenIndex(at); + dao.saveAccessTokenIndex_AndAdjust(at, config.getMaxAccessTokenCount()); // 返回新 Access-Token return at; @@ -147,15 +174,26 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm * @return Access-Token Model */ @Override - public AccessTokenModel generateAccessToken(RequestAuthModel ra, boolean isCreateRt) { + public AccessTokenModel generateAccessToken(RequestAuthModel ra, boolean isCreateRt, + Consumer appendWork) { SaOAuth2Dao dao = SaOAuth2Manager.getDao(); - + SaOAuth2DataConverter converter = SaOAuth2Manager.getDataConverter(); + SaOAuth2ServerConfig config = SaOAuth2Manager.getServerConfig(); // 1、当设置不允许同时在线的时,删除 旧Token if (!SaManager.getConfig().getIsConcurrent()) { - dao.deleteAccessToken(dao.getAccessTokenValue(ra.clientId, ra.loginId)); + List atList = dao.getAccessTokenValueList_FromAdjustAfter(ra.clientId, ra.loginId); + for (String atVal : atList) { + dao.deleteAccessToken(atVal); + dao.deleteAccessTokenIndex_BySingleData(ra.clientId, ra.loginId, atVal); + } + if (isCreateRt) { - dao.deleteRefreshToken(dao.getRefreshTokenValue(ra.clientId, ra.loginId)); + List rtList = dao.getRefreshTokenValueList_FromAdjustAfter(ra.clientId, ra.loginId); + for (String rtVal : rtList) { + dao.deleteRefreshToken(rtVal); + dao.deleteRefreshTokenIndex_BySingleData(ra.clientId, ra.loginId, rtVal); + } } } @@ -173,17 +211,17 @@ public class SaOAuth2TokenDataGenerateImpl extends SaOAuth2DataGenerateDefaultIm // 3、生成&保存 Refresh-Token if (isCreateRt) { - RefreshTokenModel rt = SaOAuth2Manager.getDataConverter().convertAccessTokenToRefreshToken(at); + RefreshTokenModel rt = converter.convertAccessTokenToRefreshToken(at, clientModel.getRefreshTokenTimeout()); at.refreshToken = rt.refreshToken; at.refreshExpiresTime = rt.expiresTime; dao.saveRefreshToken(rt); - dao.saveRefreshTokenIndex(rt); + dao.saveRefreshTokenIndex_AndAdjust(rt, config.getMaxRefreshTokenCount()); } // 5、保存 新Access-Token dao.saveAccessToken(at); - dao.saveAccessTokenIndex(at); + dao.saveAccessTokenIndex_AndAdjust(at, config.getMaxAccessTokenCount()); // 6、返回 新Access-Token return at; diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java index e43bf2b0cf0d9d6b1b738e2070ac960f76fccd32..8cd9006691016cc938df12a32f72558bc206aa41 100755 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java @@ -16,35 +16,36 @@ package com.pig4cloud.pig.auth.support.filter; +import java.io.IOException; +import java.util.Map; + +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.web.filter.OncePerRequestFilter; + +import com.pig4cloud.pig.auth.config.AuthSecurityConfigProperties; +import com.pig4cloud.pig.common.core.constant.SecurityConstants; +import com.pig4cloud.pig.common.core.servlet.RepeatBodyRequestWrapper; + import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.Mode; import cn.hutool.crypto.Padding; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; -import com.pig4cloud.pig.auth.config.AuthSecurityConfigProperties; -import com.pig4cloud.pig.common.core.constant.SecurityConstants; -import com.pig4cloud.pig.common.core.servlet.RepeatBodyRequestWrapper; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import java.io.IOException; -import java.util.Map; /** * @author lengleng * @date 2019 /2/1 密码解密工具类 */ -@Slf4j @RequiredArgsConstructor @Configuration(proxyBeanMethods = false) public class PasswordDecoderFilter extends OncePerRequestFilter implements Ordered { @@ -84,7 +85,6 @@ public class PasswordDecoderFilter extends OncePerRequestFilter implements Order if (!PASSWORD.equals(k) || ArrayUtil.isEmpty(values)) { return; } - // 解密密码 String decryptPassword = aes.decryptStr(values[0]); parameterMap.put(k, new String[] { decryptPassword }); diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java index cf673731e57b01c6314d0e321095c6c60cab9814..3d6f0b5e351ad91c3097e28962fa4f720f8edf14 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java @@ -1,5 +1,21 @@ package com.pig4cloud.pig.auth.support.filter; +import java.io.IOException; +import java.util.Optional; + +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.pig4cloud.pig.auth.config.AuthSecurityConfigProperties; +import com.pig4cloud.pig.common.core.constant.CacheConstants; +import com.pig4cloud.pig.common.core.constant.SecurityConstants; +import com.pig4cloud.pig.common.core.exception.ValidateCodeException; +import com.pig4cloud.pig.common.core.util.R; +import com.pig4cloud.pig.common.core.util.SpringContextHolder; +import com.pig4cloud.pig.common.core.util.WebUtils; + /** * 登录前处理器 * @@ -10,26 +26,11 @@ package com.pig4cloud.pig.auth.support.filter; import cn.dev33.satoken.oauth2.consts.SaOAuth2Consts; import cn.hutool.core.util.StrUtil; import cn.hutool.http.ContentType; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.pig4cloud.pig.auth.config.AuthSecurityConfigProperties; -import com.pig4cloud.pig.common.core.constant.CacheConstants; -import com.pig4cloud.pig.common.core.constant.SecurityConstants; -import com.pig4cloud.pig.common.core.exception.ValidateCodeException; -import com.pig4cloud.pig.common.core.util.R; -import com.pig4cloud.pig.common.core.util.SpringContextHolder; -import com.pig4cloud.pig.common.core.util.WebUtils; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.util.Optional; /** * @author lbw @@ -37,7 +38,6 @@ import java.util.Optional; *

* 登录前置处理器: 前端密码传输密文解密,验证码处理 */ -@Slf4j @Component @RequiredArgsConstructor public class ValidateCodeFilter extends OncePerRequestFilter { diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/ConfirmViewHandle.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/ConfirmViewHandler.java similarity index 44% rename from pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/ConfirmViewHandle.java rename to pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/ConfirmViewHandler.java index f06a60fd453bb6a3a63334285cb8125bcc8f2f55..fbbe258820153355c02ad786992f11aa4611b68b 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/ConfirmViewHandle.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/ConfirmViewHandler.java @@ -1,4 +1,4 @@ -package com.pig4cloud.pig.auth.support.handle; +package com.pig4cloud.pig.auth.support.handler; import cn.dev33.satoken.oauth2.function.SaOAuth2ConfirmViewFunction; import cn.dev33.satoken.stp.StpUtil; @@ -22,22 +22,21 @@ import java.util.Map; */ @Service @RequiredArgsConstructor -public class ConfirmViewHandle implements SaOAuth2ConfirmViewFunction { +public class ConfirmViewHandler implements SaOAuth2ConfirmViewFunction { - private final FreeMarkerConfigurer freeMarker; + private final FreeMarkerConfigurer freeMarker; - @Override - @SneakyThrows - public Object apply(String clientId, List scopes) { + @Override + @SneakyThrows + public Object apply(String clientId, List scopes) { - HttpServletRequest httpServletRequest = WebUtils.getRequest().get(); + HttpServletRequest httpServletRequest = WebUtils.getRequest().get(); + + Template confirmTemplate = freeMarker.getConfiguration().getTemplate("confirm.ftl"); + Map model = Map.of("clientId", clientId, "scopes", scopes, "loginId", StpUtil.getLoginId(), + "redirectUri", httpServletRequest.getParameter("redirect_uri"), "contextPath", + httpServletRequest.getContextPath()); + return FreeMarkerTemplateUtils.processTemplateIntoString(confirmTemplate, model); + } - Template confirmTemplate = freeMarker.getConfiguration().getTemplate("confirm.ftl"); - Map model = Map.of("clientId", clientId - , "scopes", scopes - , "loginId", StpUtil.getLoginId() - , "redirectUri", httpServletRequest.getParameter("redirect_uri") - , "contextPath", httpServletRequest.getContextPath()); - return FreeMarkerTemplateUtils.processTemplateIntoString(confirmTemplate, model); - } } diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/MobileGrantTypeHandle.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/MobileGrantTypeHandler.java similarity index 72% rename from pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/MobileGrantTypeHandle.java rename to pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/MobileGrantTypeHandler.java index dd642820ba31503014c62e776ae4bf22f51f7f0d..074b4c226e7a852dfbad3b13d0268e66dd3ea639 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/MobileGrantTypeHandle.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/MobileGrantTypeHandler.java @@ -1,4 +1,4 @@ -package com.pig4cloud.pig.auth.support.handle; +package com.pig4cloud.pig.auth.support.handler; import cn.dev33.satoken.context.model.SaRequest; import cn.dev33.satoken.oauth2.SaOAuth2Manager; @@ -25,7 +25,7 @@ import java.util.Objects; * @date 2024/07/23 */ @Service -public class MobileGrantTypeHandle implements SaOAuth2GrantTypeHandlerInterface { +public class MobileGrantTypeHandler implements SaOAuth2GrantTypeHandlerInterface { /** * 获取所要处理的 GrantType mobile 类型 @@ -55,15 +55,25 @@ public class MobileGrantTypeHandle implements SaOAuth2GrantTypeHandlerInterface throw new SaOAuth2Exception("手机号不存在"); } - StpUtil.login(infoR.getData().getSysUser().getUsername()); - // 4、构建 ra对象 RequestAuthModel ra = new RequestAuthModel(); ra.clientId = clientId; ra.loginId = StpUtil.getLoginId(); ra.scopes = scopes; - return SaOAuth2Manager.getDataGenerate().generateAccessToken(ra, true); + // 3. 获取用户信息并登录 + UserInfo userInfo = infoR.getData(); + String username = userInfo.getSysUser().getUsername(); + Long userId = userInfo.getSysUser().getUserId(); + StpUtil.login(username); + + // return SaOAuth2Manager.getDataGenerate().generateAccessToken(ra, true); + // 生成访问令牌并添加额外数据 + return SaOAuth2Manager.getDataGenerate().generateAccessToken(ra, true, at -> { + at.extraData.put("userId", userId); // 添加用户ID到额外数据 + at.extraData.put("mobile", mobile); // 添加手机号到额外数据 + at.extraData.put("username", username); // 添加用户名到额外数据 + }); } } diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/NoLoginViewHandle.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/NoLoginViewHandler.java similarity index 89% rename from pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/NoLoginViewHandle.java rename to pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/NoLoginViewHandler.java index c0c80b04a1773bba9b48d43fcfc30acc53efe02a..65d089c687235fc2ce296cdc88d8620c3f18b80d 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/NoLoginViewHandle.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/NoLoginViewHandler.java @@ -1,4 +1,4 @@ -package com.pig4cloud.pig.auth.support.handle; +package com.pig4cloud.pig.auth.support.handler; import cn.dev33.satoken.oauth2.function.SaOAuth2NotLoginViewFunction; import com.pig4cloud.pig.common.core.util.WebUtils; @@ -20,7 +20,7 @@ import java.util.Map; */ @Service @RequiredArgsConstructor -public class NoLoginViewHandle implements SaOAuth2NotLoginViewFunction { +public class NoLoginViewHandler implements SaOAuth2NotLoginViewFunction { private final FreeMarkerConfigurer freeMarker; diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/PasswordLoginHandle.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PasswordLoginHandler.java similarity index 66% rename from pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/PasswordLoginHandle.java rename to pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PasswordLoginHandler.java index e4dd4802be8054d004d791ef210121ed6b2e622d..bfab93c55419276b35f1300be4fc0cd11a383785 100644 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handle/PasswordLoginHandle.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PasswordLoginHandler.java @@ -1,20 +1,23 @@ -package com.pig4cloud.pig.auth.support.handle; +package com.pig4cloud.pig.auth.support.handler; + +import java.util.Optional; + +import org.springframework.stereotype.Service; -import cn.dev33.satoken.oauth2.exception.SaOAuth2Exception; -import cn.dev33.satoken.oauth2.function.SaOAuth2DoLoginHandleFunction; -import cn.dev33.satoken.secure.BCrypt; -import cn.dev33.satoken.stp.StpUtil; -import cn.dev33.satoken.util.SaResult; import com.pig4cloud.pig.admin.api.dto.UserDTO; import com.pig4cloud.pig.admin.api.dto.UserInfo; +import com.pig4cloud.pig.admin.api.entity.SysUser; import com.pig4cloud.pig.admin.api.feign.RemoteUserService; import com.pig4cloud.pig.common.core.util.MsgUtils; import com.pig4cloud.pig.common.core.util.R; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; +import com.pig4cloud.pig.common.core.util.RetOps; -import java.util.Objects; -import java.util.Optional; +import cn.dev33.satoken.oauth2.exception.SaOAuth2Exception; +import cn.dev33.satoken.oauth2.function.SaOAuth2DoLoginHandleFunction; +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaResult; +import cn.hutool.crypto.digest.BCrypt; +import lombok.RequiredArgsConstructor; /** * 密码登录处理器 @@ -24,7 +27,7 @@ import java.util.Optional; */ @Service @RequiredArgsConstructor -public class PasswordLoginHandle implements SaOAuth2DoLoginHandleFunction { +public class PasswordLoginHandler implements SaOAuth2DoLoginHandleFunction { private final Optional remoteUserServiceOptional; @@ -39,13 +42,12 @@ public class PasswordLoginHandle implements SaOAuth2DoLoginHandleFunction { if (remoteUserServiceOptional.isEmpty()) { return SaResult.error(); } - UserDTO userDTO = new UserDTO(); userDTO.setUsername(username); R result = remoteUserServiceOptional.get().info(userDTO); - if (Objects.nonNull(result.getData()) - && BCrypt.checkpw(password, result.getData().getSysUser().getPassword())) { + SysUser user = RetOps.of(result).getData().map(UserInfo::getSysUser).orElse(null); + if (isPasswordMatch(password, user.getPassword())) { // 判断 4 StpUtil.login(username); return SaResult.ok(); } @@ -54,4 +56,15 @@ public class PasswordLoginHandle implements SaOAuth2DoLoginHandleFunction { throw new SaOAuth2Exception(MsgUtils.getSecurityMessage("BindAuthenticator.badCredentials")); } + /** + * BCrypt验证密码 + * @param rawPassword + * @param encryptedPassword + * @return + */ + private boolean isPasswordMatch(String rawPassword, String encryptedPassword) { + // BCrypt验证密码 + return BCrypt.checkpw(rawPassword, encryptedPassword); + } + } diff --git a/pig-auth/src/main/resources/logback-spring.xml b/pig-auth/src/main/resources/logback-spring.xml index b3ac61a836b55059a4fffbaaf02eec6d82bb1439..4608100846bbd1ffe3ddc397efe1f4fc344821c5 100755 --- a/pig-auth/src/main/resources/logback-spring.xml +++ b/pig-auth/src/main/resources/logback-spring.xml @@ -69,7 +69,7 @@ - + diff --git a/pig-boot/pom.xml b/pig-boot/pom.xml index 69f2adf7c0dc34619b92176e0af83c205acc6f31..0d483ee10bca0252ee72b8f908de5f15e460e8a5 100755 --- a/pig-boot/pom.xml +++ b/pig-boot/pom.xml @@ -68,10 +68,10 @@ org.springdoc springdoc-openapi-starter-webmvc-api + - io.springboot - knife4j-boot-openapi3-ui - ${knife4j.version} + com.github.xiaoymin + knife4j-openapi3-ui diff --git a/pig-common/pig-common-bom/pom.xml b/pig-common/pig-common-bom/pom.xml index 111e540672b1a67abc470776dbcff2dc6b75d228..f00f28c4698b4795613f02a1f8ed947efd3f960c 100644 --- a/pig-common/pig-common-bom/pom.xml +++ b/pig-common/pig-common-bom/pom.xml @@ -16,28 +16,27 @@ 3.8.2 - 3.4.0 - 1.39.0 - UTF-8 - 17 - 17 - 9.0.1 - 1.2.83_noneautotype - 2.7.0 - 2.2.26 - 3.5.9 - 9.0.0 - 4.3.1 - 1.7.0 - 3.3.1 7.1 3.0.0 - 2.3.5 - 5.4.1 - 5.8.33 + 9.3.0 + 1.7.0 + 3.3.1 + 5.8.38 + 4.5.0 1.8.4 + 1.43.0 + 9.0.1 + 2.8.8 2.17.0 + 4.3.1 + 17 + 17 + 3.5.12 + 2.2.32 + 5.4.1 + 1.2.83_noneautotype 0.0.43 + UTF-8 1.6.0 @@ -153,6 +152,12 @@ com.baomidou dynamic-datasource-spring-boot3-starter ${dynamic-ds.version} + + + + com.github.xiaoymin + knife4j-openapi3-ui + ${knife4j.version} @@ -184,19 +189,6 @@ pom import - - - org.springframework.boot - spring-boot-starter-web - ${spring-boot.version} - - - - spring-boot-starter-tomcat - org.springframework.boot - - - diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java index f7f3341ffde8de3ecb2e45ebeab0aca833708197..0ec9dfdf54f895143773cc0fb1d5d59782463b49 100644 --- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java @@ -15,14 +15,28 @@ */ package com.pig4cloud.pig.common.core.jackson; -import cn.hutool.core.date.DatePattern; +import java.io.Serial; +import java.time.Duration; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.PackageVersion; -import com.fasterxml.jackson.datatype.jsr310.deser.*; -import com.fasterxml.jackson.datatype.jsr310.ser.*; +import com.fasterxml.jackson.datatype.jsr310.deser.DurationDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -import java.time.*; -import java.time.format.DateTimeFormatter; +import cn.hutool.core.date.DatePattern; /** * java 8 时间默认序列化 @@ -33,6 +47,9 @@ import java.time.format.DateTimeFormatter; public class PigJavaTimeModule extends SimpleModule { + @Serial + private static final long serialVersionUID = 1L; + public PigJavaTimeModule() { super(PackageVersion.VERSION); diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java index e51cfc9d7bb6b2f9132947afc4badbcdea2dd18c..3c2c740b4bfb8334dd2ac0d84c3142e56c72a244 100644 --- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java @@ -40,6 +40,7 @@ import java.util.Map; public class RepeatBodyRequestWrapper extends HttpServletRequestWrapper { private final byte[] bodyByteArray; + private final Map parameterMap; public RepeatBodyRequestWrapper(HttpServletRequest request) { @@ -85,7 +86,8 @@ public class RepeatBodyRequestWrapper extends HttpServletRequestWrapper { byte[] body = new byte[0]; try { body = StreamUtils.copyToByteArray(request.getInputStream()); - } catch (IOException e) { + } + catch (IOException e) { log.error("解析流中数据异常", e); } return body; @@ -115,6 +117,5 @@ public class RepeatBodyRequestWrapper extends HttpServletRequestWrapper { public String[] getParameterValues(String name) { return parameterMap.get(name); } -} - +} diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java index 62856f155078dfe56f0e48a6b95944f3d6c13d50..7e85cc04fb1652ecd815afc82ac398a1636eb7cd 100644 --- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java @@ -58,7 +58,7 @@ public class RedisUtils { return Optional.ofNullable(redisTemplate).map(template -> { RedisConnectionFactory factory = template.getConnectionFactory(); RedisConnection rc = Objects.requireNonNull(factory).getConnection(); - Cursor cursor = rc.scan(options); + Cursor cursor = rc.keyCommands().scan(options); List result = new ArrayList<>(); while (cursor.hasNext()) { result.add(new String(cursor.next())); @@ -80,7 +80,7 @@ public class RedisUtils { ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); RedisConnectionFactory factory = redisTemplate.getConnectionFactory(); RedisConnection rc = Objects.requireNonNull(factory).getConnection(); - Cursor cursor = rc.scan(options); + Cursor cursor = rc.keyCommands().scan(options); List result = new ArrayList<>(size); int tmpIndex = 0; int fromIndex = page * size; diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java index 46b59659c27f80b9ba288c56d5854fd06b176064..c33231148475318fd3a2ec79b40b2be4b255448b 100755 --- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java @@ -66,7 +66,6 @@ public class SpringContextHolder implements ApplicationContextAware, Environment /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ - @SuppressWarnings("unchecked") public static T getBean(String name) { return (T) applicationContext.getBean(name); } diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java index bc5944529f9fd293d772784d5da1501eabcaf7f8..3b8cffa5a3995c8cdf3d4b6979661b8ae2b07230 100755 --- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java @@ -16,37 +16,37 @@ package com.pig4cloud.pig.common.core.util; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.method.HandlerMethod; + +import com.pig4cloud.pig.common.core.exception.CheckedException; + import cn.hutool.core.codec.Base64; import cn.hutool.core.util.StrUtil; -import com.pig4cloud.pig.common.core.exception.CheckedException; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; import lombok.SneakyThrows; import lombok.experimental.UtilityClass; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.method.HandlerMethod; - -import java.nio.charset.StandardCharsets; -import java.util.Optional; /** * Miscellaneous utilities for web applications. * * @author L.cm */ -@Slf4j @UtilityClass public class WebUtils extends org.springframework.web.util.WebUtils { private final String BASIC_ = "Basic "; - private final String UNKNOWN = "unknown"; + // private final String UNKNOWN = "unknown"; /** * 判断是否ajax请求 spring ajax 返回含有 ResponseBody 或者 RestController注解 diff --git a/pig-common/pig-common-core/src/main/resources/banner.txt b/pig-common/pig-common-core/src/main/resources/banner.txt index 7162661d06a3908938b6d7449d8fa7c1bd524f43..448b44d733edfcf9400e95dfdef5dcd70870cb10 100755 --- a/pig-common/pig-common-core/src/main/resources/banner.txt +++ b/pig-common/pig-common-core/src/main/resources/banner.txt @@ -1,4 +1,4 @@ -${AnsiColor.BRIGHT_YELLOW} +${AnsiColor.BRIGHT_MAGENTA}😈💩☠💓💕🥩🌏🛩🚻☯♀♾♻⚜🔱🥨🍖🥕🌽🌶🥦🍄🥜🐬🐇 ::::::::: ::::::::::: :::::::: :+: :+: :+: :+: :+: @@ -11,7 +11,4 @@ ${AnsiColor.BRIGHT_YELLOW} www.pig4cloud.com Pig Microservice Architecture -${AnsiColor.DEFAULT} - - - +${AnsiColor.DEFAULT} \ No newline at end of file diff --git a/pig-common/pig-common-datasource/pom.xml b/pig-common/pig-common-datasource/pom.xml index c529eeeb533d72e095408f0e4c9c860ae15ae5c0..eb3105e66c56b11432c24ac9bf0361ae84f2d3bd 100644 --- a/pig-common/pig-common-datasource/pom.xml +++ b/pig-common/pig-common-datasource/pom.xml @@ -24,14 +24,9 @@ ${revision} 4.0.0 - - com.pig4cloud pig-common-datasource - jar - pig 动态切换数据源 - diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java index c7c169b58fdf0f46c916e851712ca5622ca0cca8..b3af8b5ef1d9c1e09bc171bb3c5a33a82aa03de5 100644 --- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java +++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java @@ -16,11 +16,10 @@ package com.pig4cloud.pig.common.feign.sentinel.ext; -import com.alibaba.cloud.sentinel.feign.SentinelContractHolder; -import feign.Contract; -import feign.Feign; -import feign.InvocationHandlerFactory; -import feign.Target; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Map; + import org.springframework.beans.BeansException; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FeignClient; @@ -28,13 +27,14 @@ import org.springframework.cloud.openfeign.FeignClientFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.util.Map; +import com.alibaba.cloud.sentinel.feign.SentinelContractHolder; + +import feign.Contract; +import feign.Feign; +import feign.InvocationHandlerFactory; +import feign.Target; /** * 支持自动降级注入 重写 {@link com.alibaba.cloud.sentinel.feign.SentinelFeign} @@ -123,17 +123,12 @@ public final class PigSentinelFeign { return super.internalBuild(); } - private Object getFieldValue(Object instance, String fieldName) { - Field field = ReflectionUtils.findField(instance.getClass(), fieldName); - field.setAccessible(true); - try { - return field.get(instance); - } - catch (IllegalAccessException e) { - // ignore - } - return null; - } + /** + * private Object getFieldValue(Object instance, String fieldName) { Field field = + * ReflectionUtils.findField(instance.getClass(), fieldName); + * field.setAccessible(true); try { return field.get(instance); } catch + * (IllegalAccessException e) { // ignore } return null; } + **/ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java index 2b71c796fad7a465d06f579a77998ab1fed0afe1..327a113f57dfdb99d4d250e9b41bda4a8a64195b 100644 --- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java +++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java @@ -49,111 +49,102 @@ import java.util.List; @RestControllerAdvice public class GlobalBizExceptionHandler { - /** - * 全局异常. - * - * @param e the e - * @return R - */ - @ExceptionHandler(Exception.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public R handleGlobalException(Exception e) { - log.error("全局异常信息 ex={}", e.getMessage(), e); + /** + * 全局异常. + * @param e the e + * @return R + */ + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public R handleGlobalException(Exception e) { + log.error("全局异常信息 ex={}", e.getMessage(), e); - // 业务异常交由 sentinel 记录 - Tracer.trace(e); - return R.failed(e.getLocalizedMessage()); - } + // 业务异常交由 sentinel 记录 + Tracer.trace(e); + return R.failed(e.getLocalizedMessage()); + } + /** + * 处理业务校验过程中碰到的非法参数异常 该异常基本由{@link org.springframework.util.Assert}抛出 + * @param exception 参数校验异常 + * @return API返回结果对象包装后的错误输出结果 + * @see Assert#hasLength(String, String) + * @see Assert#hasText(String, String) + * @see Assert#isTrue(boolean, String) + * @see Assert#isNull(Object, String) + * @see Assert#notNull(Object, String) + */ + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.OK) + public R handleIllegalArgumentException(IllegalArgumentException exception) { + log.error("非法参数,ex = {}", exception.getMessage(), exception); + return R.failed(exception.getMessage()); + } - /** - * 处理业务校验过程中碰到的非法参数异常 该异常基本由{@link org.springframework.util.Assert}抛出 - * - * @param exception 参数校验异常 - * @return API返回结果对象包装后的错误输出结果 - * @see Assert#hasLength(String, String) - * @see Assert#hasText(String, String) - * @see Assert#isTrue(boolean, String) - * @see Assert#isNull(Object, String) - * @see Assert#notNull(Object, String) - */ - @ExceptionHandler(IllegalArgumentException.class) - @ResponseStatus(HttpStatus.OK) - public R handleIllegalArgumentException(IllegalArgumentException exception) { - log.error("非法参数,ex = {}", exception.getMessage(), exception); - return R.failed(exception.getMessage()); - } + /** + * 处理未登录异常 + * @param e e + * @return {@link R } + */ + @ExceptionHandler(NotLoginException.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public R handleSaNotLoginException(NotLoginException e) { + return R.failed(e.getMessage()); + } - /** - * 处理未登录异常 - * - * @param e e - * @return {@link R } - */ - @ExceptionHandler(NotLoginException.class) - @ResponseStatus(HttpStatus.UNAUTHORIZED) - public R handleSaNotLoginException(NotLoginException e) { - return R.failed(e.getMessage()); - } + /** + * 处理 Access Denied 异常 + * @param e e + * @return {@link R } + */ + @ExceptionHandler({ AccessDeniedException.class, NotPermissionException.class }) + @ResponseStatus(HttpStatus.FORBIDDEN) + public R handleAccessDeniedException(AccessDeniedException e) { + String msg = SpringSecurityMessageSource.getAccessor() + .getMessage("AbstractAccessDecisionManager.accessDenied", e.getMessage()); + log.warn("拒绝授权异常信息 ex={}", msg); + return R.failed(msg); + } + /** + * validation Exception + * @param exception + * @return R + */ + @ExceptionHandler({ MethodArgumentNotValidException.class }) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public R handleBodyValidException(MethodArgumentNotValidException exception) { + List fieldErrors = exception.getBindingResult().getFieldErrors(); + log.warn("参数绑定异常,ex = {}", fieldErrors.get(0).getDefaultMessage()); + return R.failed(String.format("%s %s", fieldErrors.get(0).getField(), fieldErrors.get(0).getDefaultMessage())); + } - /** - * 处理 Access Denied 异常 - * - * @param e e - * @return {@link R } - */ - @ExceptionHandler({AccessDeniedException.class, NotPermissionException.class}) - @ResponseStatus(HttpStatus.FORBIDDEN) - public R handleAccessDeniedException(AccessDeniedException e) { - String msg = SpringSecurityMessageSource.getAccessor() - .getMessage("AbstractAccessDecisionManager.accessDenied", e.getMessage()); - log.warn("拒绝授权异常信息 ex={}", msg); - return R.failed(msg); - } + /** + * validation Exception (以form-data形式传参) + * @param exception + * @return R + */ + @ExceptionHandler({ BindException.class }) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public R bindExceptionHandler(BindException exception) { + List fieldErrors = exception.getBindingResult().getFieldErrors(); + log.warn("参数绑定异常,ex = {}", fieldErrors.get(0).getDefaultMessage()); + return R.failed(fieldErrors.get(0).getDefaultMessage()); + } - /** - * validation Exception - * - * @param exception - * @return R - */ - @ExceptionHandler({MethodArgumentNotValidException.class}) - @ResponseStatus(HttpStatus.BAD_REQUEST) - public R handleBodyValidException(MethodArgumentNotValidException exception) { - List fieldErrors = exception.getBindingResult().getFieldErrors(); - log.warn("参数绑定异常,ex = {}", fieldErrors.get(0).getDefaultMessage()); - return R.failed(String.format("%s %s", fieldErrors.get(0).getField(), fieldErrors.get(0).getDefaultMessage())); - } - - /** - * validation Exception (以form-data形式传参) - * - * @param exception - * @return R - */ - @ExceptionHandler({BindException.class}) - @ResponseStatus(HttpStatus.BAD_REQUEST) - public R bindExceptionHandler(BindException exception) { - List fieldErrors = exception.getBindingResult().getFieldErrors(); - log.warn("参数绑定异常,ex = {}", fieldErrors.get(0).getDefaultMessage()); - return R.failed(fieldErrors.get(0).getDefaultMessage()); - } - - /** - * 保持和低版本请求路径不存在的行为一致 - *

- * [Spring Boot - * 3.2.0] 404 Not Found behavior #38733 - * - * @param exception - * @return R - */ - @ExceptionHandler({NoResourceFoundException.class}) - @ResponseStatus(HttpStatus.NOT_FOUND) - public R notFoundExceptionHandler(NoResourceFoundException exception) { - log.debug("请求路径 404 {}", exception.getMessage()); - return R.failed(exception.getMessage()); - } + /** + * 保持和低版本请求路径不存在的行为一致 + *

+ * [Spring Boot + * 3.2.0] 404 Not Found behavior #38733 + * @param exception + * @return R + */ + @ExceptionHandler({ NoResourceFoundException.class }) + @ResponseStatus(HttpStatus.NOT_FOUND) + public R notFoundExceptionHandler(NoResourceFoundException exception) { + log.debug("请求路径 404 {}", exception.getMessage()); + return R.failed(exception.getMessage()); + } } diff --git a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java index 05e7e899c41004061ccac5ef96e717a911b7a762..dd084baab377cc897aa6e52496b13ead5e2ed5b9 100644 --- a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java +++ b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java @@ -17,8 +17,10 @@ package org.springframework.cloud.openfeign; -import com.pig4cloud.pig.common.feign.PigFeignAutoConfiguration; -import lombok.Getter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.support.AbstractBeanDefinition; @@ -31,15 +33,12 @@ import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.env.Environment; -import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import lombok.Getter; /** * @author L.cm @@ -157,9 +156,10 @@ public class PigFeignClientsRegistrar implements ImportBeanDefinitionRegistrar, * candidates. * @return the factory class */ - private Class getSpringFactoriesLoaderFactoryClass() { - return PigFeignAutoConfiguration.class; - } + /** + * private Class getSpringFactoriesLoaderFactoryClass() { return + * PigFeignAutoConfiguration.class; } + **/ private void validate(Map attributes) { AnnotationAttributes annotation = AnnotationAttributes.fromMap(attributes); @@ -259,13 +259,15 @@ public class PigFeignClientsRegistrar implements ImportBeanDefinitionRegistrar, "Either 'name' or 'value' must be provided in @" + FeignClient.class.getSimpleName()); } - private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name, Object configuration) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FeignClientSpecification.class); - builder.addConstructorArgValue(name); - builder.addConstructorArgValue(configuration); - registry.registerBeanDefinition(name + "." + FeignClientSpecification.class.getSimpleName(), - builder.getBeanDefinition()); - } + /** + * private void registerClientConfiguration(BeanDefinitionRegistry registry, Object + * name, Object configuration) { BeanDefinitionBuilder builder = + * BeanDefinitionBuilder.genericBeanDefinition(FeignClientSpecification.class); + * builder.addConstructorArgValue(name); + * builder.addConstructorArgValue(configuration); registry.registerBeanDefinition(name + * + "." + FeignClientSpecification.class.getSimpleName(), + * builder.getBeanDefinition()); } + **/ private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name, Object className, Object configuration) { diff --git a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java index 4e1258208b428568ba4703162e77a85e3df6c7e0..761be94976c3d6aba2581e9e7535c0bec4096426 100755 --- a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java +++ b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java @@ -17,6 +17,9 @@ package com.pig4cloud.pig.common.log.event; import com.pig4cloud.pig.admin.api.entity.SysLog; + +import java.io.Serial; + import org.springframework.context.ApplicationEvent; /** @@ -24,6 +27,9 @@ import org.springframework.context.ApplicationEvent; */ public class SysLogEvent extends ApplicationEvent { + @Serial + private static final long serialVersionUID = 1L; + public SysLogEvent(SysLog source) { super(source); } diff --git a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java index a1bf7da75104eb057cab3c091d2a104cd031167f..f40e4ceed2acac7a55539b6b5ca619d0eff9b023 100644 --- a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java +++ b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java @@ -1,7 +1,9 @@ package com.pig4cloud.pig.common.log.event; import com.pig4cloud.pig.admin.api.entity.SysLog; + import lombok.Data; +import lombok.EqualsAndHashCode; /** * spring event log @@ -10,8 +12,11 @@ import lombok.Data; * @date 2023/8/11 */ @Data +@EqualsAndHashCode(callSuper = false) public class SysLogEventSource extends SysLog { + private static final long serialVersionUID = 1L; + /** * 参数重写成object */ diff --git a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java index 636715429b2d3f34f869916d6c60a86429c3e3bd..dbb199be343f263f5c4b85460a2b9db90d4464ce 100755 --- a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java +++ b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java @@ -16,7 +16,14 @@ package com.pig4cloud.pig.common.log.event; -import cn.hutool.core.util.StrUtil; +import java.util.Objects; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; +import org.springframework.scheduling.annotation.Async; + import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ser.FilterProvider; @@ -26,21 +33,16 @@ import com.pig4cloud.pig.admin.api.entity.SysLog; import com.pig4cloud.pig.admin.api.feign.RemoteLogService; import com.pig4cloud.pig.common.core.jackson.PigJavaTimeModule; import com.pig4cloud.pig.common.log.config.PigLogProperties; + +import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.event.EventListener; -import org.springframework.core.annotation.Order; -import org.springframework.scheduling.annotation.Async; - -import java.util.Objects; /** - * @author lengleng 异步监听日志事件 + * 异步监听日志事件 + * + * @author lengleng */ -@Slf4j @RequiredArgsConstructor public class SysLogListener implements InitializingBean { diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java index 2db3723563be55cd950269574a2d66d12f687d7d..174a90398ed1dd8dab880eea6c42c95d5e4beb06 100644 --- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java +++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java @@ -1,14 +1,16 @@ package com.pig4cloud.pig.common.mybatis.base; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; -import java.io.Serializable; -import java.time.LocalDateTime; - /** * 抽象实体 * @@ -19,6 +21,9 @@ import java.time.LocalDateTime; @Setter public class BaseEntity implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** * 创建者 */ diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java index d2347fc397924bc28c03ead52d9c72cbb5d526c8..4258a2a25c42573c031bd7755a8d04e38aa4fea5 100644 --- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java +++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java @@ -73,7 +73,6 @@ public class MybatisPlusMetaObjectHandler implements MetaObjectHandler { /** * 获取用户名 - * * @return {@link String } */ private String getUserName() { diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java index 96e1760bb35d292768190ae325a95a0d49eae5d7..2d72a7fb2ac1ba85a59bd8b576922212d12c1665 100644 --- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java +++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java @@ -1,17 +1,20 @@ package com.pig4cloud.pig.common.mybatis.plugins; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ParameterUtils; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect; + import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import org.apache.ibatis.executor.Executor; -import org.apache.ibatis.mapping.BoundSql; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.session.ResultHandler; -import org.apache.ibatis.session.RowBounds; /** * 分页拦截器 @@ -23,6 +26,7 @@ import org.apache.ibatis.session.RowBounds; */ @Data @NoArgsConstructor +@EqualsAndHashCode(callSuper = false) public class PigPaginationInnerInterceptor extends PaginationInnerInterceptor { /** diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java index e7bb5e3c33531142d504c3de101f48454f4499ac..ae1e0c983503d7f417a887e4567220e4f6628feb 100644 --- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java +++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java @@ -18,23 +18,24 @@ package com.pig4cloud.pig.common.mybatis.resolver; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.metadata.OrderItem; -import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import jakarta.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.http.HttpServletRequest; /** * @author lengleng @@ -42,7 +43,6 @@ import java.util.stream.Collectors; *

* 解决Mybatis Plus Order By SQL注入问题 */ -@Slf4j public class SqlFilterArgumentResolver implements HandlerMethodArgumentResolver { /** diff --git a/pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java b/pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java index fd6bd119682713ac917eb94a46ac25d3bf73a465..13c41b99391480fa0bb1d91386be4d11d289aa88 100755 --- a/pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java +++ b/pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java @@ -17,6 +17,18 @@ package com.pig4cloud.pig.common.file.oss.service; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.InitializingBean; + import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; @@ -25,19 +37,19 @@ import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.*; +import com.amazonaws.services.s3.model.Bucket; +import com.amazonaws.services.s3.model.ObjectListing; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.PutObjectResult; +import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.util.IOUtils; import com.pig4cloud.pig.common.file.core.FileProperties; import com.pig4cloud.pig.common.file.core.FileTemplate; + import lombok.Cleanup; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import org.springframework.beans.factory.InitializingBean; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.net.URL; -import java.util.*; /** * aws-s3 通用存储操作 支持所有兼容s3协议的云存储: {阿里云OSS,腾讯云COS,七牛云,京东云,minio 等} @@ -73,6 +85,7 @@ public class OssTemplate implements InitializingBean, FileTemplate { * API Documentation */ @SneakyThrows + @SuppressWarnings("deprecation") public List getAllBuckets() { return amazonS3.listBuckets(); } @@ -83,6 +96,7 @@ public class OssTemplate implements InitializingBean, FileTemplate { * API Documentation */ @SneakyThrows + @SuppressWarnings("deprecation") public Optional getBucket(String bucketName) { return amazonS3.listBuckets().stream().filter(b -> b.getName().equals(bucketName)).findFirst(); } diff --git a/pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java b/pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java index 94fe01228b2a26c31d40c962cf571f03f3ae1f59..c27711a92595a17fa9edce027e29e0c08058b418 100644 --- a/pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java +++ b/pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java @@ -1,10 +1,10 @@ package com.pig4cloud.pig.common.seata.config; -import com.pig4cloud.pig.common.core.factory.YamlPropertySourceFactory; -import io.seata.spring.annotation.datasource.EnableAutoDataSourceProxy; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; +import com.pig4cloud.pig.common.core.factory.YamlPropertySourceFactory; + /** * Seata 配置类 * @@ -12,7 +12,6 @@ import org.springframework.context.annotation.PropertySource; * @date 2022/3/29 */ @PropertySource(value = "classpath:seata-config.yml", factory = YamlPropertySourceFactory.class) -@EnableAutoDataSourceProxy(useJdkProxy = true) @Configuration(proxyBeanMethods = false) public class SeataAutoConfiguration { diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java index d0611781bc932d82c81571c37884d76786d510ca..ea9b038befb497a0776c09f59ccb1f44c95931f1 100644 --- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java +++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java @@ -33,10 +33,10 @@ import java.lang.annotation.*; */ @Documented @Inherited -@Target({ElementType.TYPE}) +@Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) -@Import({ResourceServerConfiguration.class, SaPermissionImpl.class, PermissionAspect.class, PermitAllUrlProperties.class, - PigFeignClientConfiguration.class}) +@Import({ ResourceServerConfiguration.class, SaPermissionImpl.class, PermissionAspect.class, + PermitAllUrlProperties.class, PigFeignClientConfiguration.class }) public @interface EnablePigResourceServer { } diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/MessageSourceConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/MessageSourceConfiguration.java index 983fce1cf6a63b61eebfdb154a34456990523a82..be90835025cdd1b23328dc0ac6e609d47026dab0 100644 --- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/MessageSourceConfiguration.java +++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/MessageSourceConfiguration.java @@ -14,16 +14,15 @@ import org.springframework.context.support.ReloadableResourceBundleMessageSource @Configuration(proxyBeanMethods = false) public class MessageSourceConfiguration { - /** - * 安全异常消息源 - * - * @return {@link MessageSource } - */ - @Bean - public MessageSource securityMessageSource() { - ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("classpath:i18n/errors/messages"); - return messageSource; - } + /** + * 安全异常消息源 + * @return {@link MessageSource } + */ + @Bean + public MessageSource securityMessageSource() { + ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); + messageSource.setBasename("classpath:i18n/errors/messages"); + return messageSource; + } } diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/PermitAllUrlProperties.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/PermitAllUrlProperties.java index 67e0e30e965c11a64c1843e43219ac8dc4659c34..ae31f0e2130609866e4ccfe4ca42392385e1bcbe 100755 --- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/PermitAllUrlProperties.java +++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/PermitAllUrlProperties.java @@ -16,12 +16,14 @@ package com.pig4cloud.pig.common.security.config; -import cn.hutool.core.util.ReUtil; -import cn.hutool.extra.spring.SpringUtil; -import com.pig4cloud.pig.common.security.annotation.Inner; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.regex.Pattern; + import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.core.annotation.AnnotationUtils; @@ -29,8 +31,12 @@ import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import java.util.*; -import java.util.regex.Pattern; +import com.pig4cloud.pig.common.security.annotation.Inner; + +import cn.hutool.core.util.ReUtil; +import cn.hutool.extra.spring.SpringUtil; +import lombok.Getter; +import lombok.Setter; /** * @author lengleng @@ -38,7 +44,6 @@ import java.util.regex.Pattern; *

* 资源服务器对外直接暴露URL,如果设置contex-path 要特殊处理 */ -@Slf4j @ConfigurationProperties(prefix = "security.oauth2.ignore") public class PermitAllUrlProperties implements InitializingBean { diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/ResourceServerConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/ResourceServerConfiguration.java index 9c62f4f4656139ca34a21146236f3b856656e0da..d11b7a482fd4b9c4e6f0b55a65a3d8f7ca3e60ef 100644 --- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/ResourceServerConfiguration.java +++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/config/ResourceServerConfiguration.java @@ -1,25 +1,27 @@ package com.pig4cloud.pig.common.security.config; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import com.pig4cloud.pig.common.core.util.R; +import com.pig4cloud.pig.common.core.util.WebUtils; + import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.filter.SaServletFilter; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.oauth2.data.model.AccessTokenModel; import cn.dev33.satoken.oauth2.template.SaOAuth2Util; import cn.dev33.satoken.router.SaRouter; -import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.stp.parameter.SaLoginParameter; import cn.hutool.json.JSONUtil; -import com.pig4cloud.pig.common.core.util.R; -import com.pig4cloud.pig.common.core.util.WebUtils; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Lazy; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * Resource Server 配置 @@ -30,48 +32,49 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @RequiredArgsConstructor public class ResourceServerConfiguration implements WebMvcConfigurer { - @Autowired - @Lazy - private PermitAllUrlProperties permitAllUrlProperties; + @Autowired + @Lazy + private PermitAllUrlProperties permitAllUrlProperties; + + /** + * 添加 sa-token 注解拦截器 + * @param registry 注册表 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + SaInterceptor saInterceptor = new SaInterceptor(); + saInterceptor.isAnnotation(true); + registry.addInterceptor(saInterceptor).addPathPatterns("/**"); + } - /** - * 添加 sa-token 注解拦截器 - * - * @param registry 注册表 - */ - @Override - public void addInterceptors(InterceptorRegistry registry) { - SaInterceptor saInterceptor = new SaInterceptor(); - saInterceptor.isAnnotation(true); - registry.addInterceptor(saInterceptor).addPathPatterns("/**"); - } + /** + * 资源服务器配置 + */ + @Bean + public SaServletFilter getSaServletFilter() { + SaServletFilter saServletFilter = new SaServletFilter().addInclude("/**").setAuth(obj -> { + SaRouter.match("/**").check(() -> { + // Authorization: bearer token + String token = WebUtils.getToken(); + AccessTokenModel accessTokenModel = SaOAuth2Util.checkAccessToken(token); - /** - * 资源服务器配置 - */ - @Bean - public SaServletFilter getSaServletFilter() { - SaServletFilter saServletFilter = new SaServletFilter().addInclude("/**").setAuth(obj -> { - SaRouter.match("/**").check(() -> { - // Authorization: bearer token - String token = WebUtils.getToken(); - AccessTokenModel accessTokenModel = SaOAuth2Util.checkAccessToken(token); + // 登录 + String loginId = accessTokenModel.loginId.toString(); + SaLoginParameter saLoginModel = new SaLoginParameter(); - // 登录 - String loginId = accessTokenModel.loginId.toString(); - StpUtil.login(loginId, SaLoginConfig.setToken(token)); - }); - }).setError(e -> { - // 校验令牌失败 424 (主要是和401区分) - SaHolder.getResponse().setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); - SaHolder.getResponse().setStatus(HttpStatus.FAILED_DEPENDENCY.value()); - return JSONUtil.toJsonStr(R.failed(e.getMessage())); - }); + StpUtil.login(loginId, saLoginModel); + }); + }).setError(e -> { + // 校验令牌失败 424 (主要是和401区分) + SaHolder.getResponse().setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + SaHolder.getResponse().setStatus(HttpStatus.FAILED_DEPENDENCY.value()); + return JSONUtil.toJsonStr(R.failed(e.getMessage())); + }); - for (String url : permitAllUrlProperties.getUrls()) { - saServletFilter.addExclude(url); - } - return saServletFilter; - } + for (String url : permitAllUrlProperties.getUrls()) { + saServletFilter.addExclude(url); + } + return saServletFilter; + } } diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java index 5f36e54ed1c26254d58a8553e408bba3511f844a..c60372162db3e389715b6c706db4090ed1230cfb 100644 --- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java +++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java @@ -1,18 +1,18 @@ package com.pig4cloud.pig.common.security.feign; +import java.util.Collection; + +import org.springframework.http.HttpHeaders; + +import com.pig4cloud.pig.common.core.constant.SecurityConstants; +import com.pig4cloud.pig.common.core.util.WebUtils; + import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollUtil; -import com.pig4cloud.pig.common.core.constant.SecurityConstants; -import com.pig4cloud.pig.common.core.util.WebUtils; import feign.RequestInterceptor; import feign.RequestTemplate; -import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; - -import java.util.Collection; /** * oauth2 feign token传递 @@ -22,7 +22,6 @@ import java.util.Collection; * @author lengleng * @date 2022/5/29 */ -@Slf4j @RequiredArgsConstructor public class PigOAuthRequestInterceptor implements RequestInterceptor { @@ -46,7 +45,7 @@ public class PigOAuthRequestInterceptor implements RequestInterceptor { if (!WebUtils.getRequest().isPresent()) { return; } - HttpServletRequest request = WebUtils.getRequest().get(); + // HttpServletRequest request = WebUtils.getRequest().get(); // 避免请求参数的 query token 无法传递 SaTokenInfo tokenInfo = StpUtil.getTokenInfo(); diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FromXssException.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FromXssException.java index cd1e9394570ce8c637f70aed611999335d8c4d2c..fa8a98cf398b156d4762d4d4b3a520e95226530a 100644 --- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FromXssException.java +++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FromXssException.java @@ -16,6 +16,8 @@ package com.pig4cloud.pig.common.xss.core; +import java.io.Serial; + import lombok.Getter; /** @@ -26,6 +28,9 @@ import lombok.Getter; @Getter public class FromXssException extends IllegalStateException implements XssException { + @Serial + private static final long serialVersionUID = 1L; + private final String input; public FromXssException(String input, String message) { diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssException.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssException.java index 14d49eeee145b79c283c8c5613b28f2a21916633..b5e0362428f60b9180b418cc7b750f521d8cc411 100644 --- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssException.java +++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssException.java @@ -16,9 +16,10 @@ package com.pig4cloud.pig.common.xss.core; -import lombok.Getter; - import java.io.IOException; +import java.io.Serial; + +import lombok.Getter; /** * xss jackson 异常 @@ -28,6 +29,9 @@ import java.io.IOException; @Getter public class JacksonXssException extends IOException implements XssException { + @Serial + private static final long serialVersionUID = 1L; + private final String input; public JacksonXssException(String input, String message) { diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializerBase.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializerBase.java index 9129d00bfc7a93d7d884b70605ec4413ce640884..384a94e7e39bef9c5919d8d30e3f29da05b9ad5d 100644 --- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializerBase.java +++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializerBase.java @@ -45,7 +45,7 @@ public abstract class XssCleanDeserializerBase extends JsonDeserializer } // xss 配置 - return this.clean(p.getCurrentName(), text); + return this.clean(p.currentName(), text); } /** diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/utils/XssUtil.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/utils/XssUtil.java index ec8174c7cd083406bd9df941a4346f8e76bbce59..857b00d17e5ece919a6b5247ee8bec8f57a33aa8 100644 --- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/utils/XssUtil.java +++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/utils/XssUtil.java @@ -41,7 +41,7 @@ public class XssUtil { * @return 清理后的 text */ public static String trim(String text, boolean trim) { - return trim ? StringUtils.trimWhitespace(text) : text; + return trim ? (text == null ? null : text.strip()) : text; } /** diff --git a/pig-gateway/pom.xml b/pig-gateway/pom.xml index 22995993e46ccb53a1f61f27b4c29ce75c455a2a..14f6a0bc90adcaa774560b970ff0f20be1396f79 100755 --- a/pig-gateway/pom.xml +++ b/pig-gateway/pom.xml @@ -71,9 +71,8 @@ - io.springboot - knife4j-openapi3-ui - ${knife4j.version} + com.github.xiaoymin + knife4j-openapi3-ui cn.hutool diff --git a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java index 9cbfc702869b2cb1c06ba40848ddf3012e59649c..e0f9006b70da656fa6dc7cc47f8ccc30364505aa 100644 --- a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java +++ b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java @@ -16,18 +16,15 @@ package com.alibaba.nacos; -import com.alibaba.nacos.console.config.ConfigConstants; -import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; +import com.alibaba.nacos.console.config.ConfigConstants; + /** - * @author nacos - *

- * nacos console 源码运行,方便开发 生产从官网下载zip最新版集群配置运行 + * @author nacos nacos console 源码运行,方便开发 生产从官网下载zip最新版集群配置运行 */ -@Slf4j @EnableScheduling @SpringBootApplication public class PigNacosApplication { diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/RegisterUserDTO.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/RegisterUserDTO.java index 05c00746ad20179be236c1ecc3c4131410133472..f40ebbb9c8bf89b89f01096313b7c4d7a286ed16 100644 --- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/RegisterUserDTO.java +++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/RegisterUserDTO.java @@ -11,18 +11,19 @@ import lombok.Data; @Data public class RegisterUserDTO { - /** - * 用户名 - */ - private String username; + /** + * 用户名 + */ + private String username; - /** - * 新密码 - */ - private String password; + /** + * 新密码 + */ + private String password; + + /** + * 电话 + */ + private String phone; - /** - * 电话 - */ - private String phone; } diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserDTO.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserDTO.java index 287bae3f6187bea3e7f98f00ae9fdc441dd97418..a0e4c423354446f112a98953b22ced8ee04702e6 100644 --- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserDTO.java +++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserDTO.java @@ -24,6 +24,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serial; import java.util.List; /** @@ -35,6 +36,9 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class UserDTO extends SysUser { + @Serial + private static final long serialVersionUID = 1L; + /** * 角色ID */ diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserInfo.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserInfo.java index d0558648432f950dc3098bccafc285a68e6fb179..3392842a49e309fe77f34282fc8f2cbea591d39c 100644 --- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserInfo.java +++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserInfo.java @@ -19,12 +19,14 @@ package com.pig4cloud.pig.admin.api.dto; +import java.io.Serial; +import java.io.Serializable; + import com.pig4cloud.pig.admin.api.entity.SysUser; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.io.Serializable; - /** * @author lengleng * @date 2017/11/11 @@ -33,6 +35,9 @@ import java.io.Serializable; @Schema(description = "用户信息") public class UserInfo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** * 用户基本信息 */ diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/DeptExcelVo.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/DeptExcelVo.java index 7272f3e01637ffeb835133aa2f6982da9f395567..fc7515f0227ab9ecc9e88adb265864b3f4663ac4 100644 --- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/DeptExcelVo.java +++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/DeptExcelVo.java @@ -6,14 +6,21 @@ import com.pig4cloud.plugin.excel.annotation.ExcelLine; import jakarta.validation.constraints.NotBlank; import lombok.Data; +import java.io.Serial; import java.io.Serializable; /** * 部门导入导出 + * + * @author weimeilayer@gmail.com ✨ + * @date 💓💕2025年6月6日🐬🐇 💓💕 */ @Data public class DeptExcelVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** * 导入时候回显行号 */ diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java index 3967d3bf6e1fb9c171b9c9d1f2e352c6404df314..42a2a031301b42e263a5aec31108b94d0261a822 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java @@ -5,6 +5,8 @@ import com.pig4cloud.pig.admin.service.SysUserService; import com.pig4cloud.pig.common.core.util.R; import com.pig4cloud.pig.common.log.annotation.SysLog; import com.pig4cloud.pig.common.security.annotation.Inner; + +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.PostMapping; @@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/register") @RequiredArgsConstructor +@Tag(description = "register", name = "客户端注册管理模块") @ConditionalOnProperty(name = "register.user", matchIfMissing = true) public class SysRegisterController { @@ -28,7 +31,6 @@ public class SysRegisterController { /** * 注册用户 - * * @param registerUserDTO 注册用户 DTO * @return {@link R }<{@link Boolean }> */ diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysSystemInfoController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysSystemInfoController.java index aaa20591d02c707b4ca03515ecde6b8ab9ff0c95..e659811c8c3bf17af3467fa9eee820a599f9f1b3 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysSystemInfoController.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysSystemInfoController.java @@ -15,6 +15,10 @@ import org.springframework.web.bind.annotation.RestController; import java.util.*; +/** + * @author weimeilayer@gmail.com ✨ + * @date 💓💕2025年6月6日🐬🐇 💓💕 + */ @RestController @RequestMapping("/system") @RequiredArgsConstructor diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java index 9289617ce05aa51cc1c223d6473ffef3642047b8..2dabedfad7475ac0b27700436c17804624bf587c 100755 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java @@ -59,13 +59,13 @@ public class SysDictServiceImpl extends ServiceImpl impl @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true) public R removeDictByIds(Long[] ids) { - List dictIdList = baseMapper.selectBatchIds(CollUtil.toList(ids)) + List dictIdList = baseMapper.selectByIds(CollUtil.toList(ids)) .stream() .filter(sysDict -> !sysDict.getSystemFlag().equals(DictTypeEnum.SYSTEM.getType()))// 系统内置类型不删除 .map(SysDict::getId) .collect(Collectors.toList()); - baseMapper.deleteBatchIds(dictIdList); + baseMapper.deleteByIds(dictIdList); dictItemMapper.delete(Wrappers.lambdaQuery().in(SysDictItem::getDictId, dictIdList)); return R.ok(); diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java index 1041e048ef2d738811fc15c45a44b88354caf7fd..243fae597abe59061df4b2c7e2ca4077025e85fc 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java @@ -19,12 +19,20 @@ package com.pig4cloud.pig.admin.service.impl; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.tree.Tree; -import cn.hutool.core.lang.tree.TreeNode; -import cn.hutool.core.lang.tree.TreeUtil; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import org.springframework.beans.BeanUtils; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pig.admin.api.entity.SysMenu; @@ -38,22 +46,15 @@ import com.pig4cloud.pig.common.core.constant.enums.MenuTypeEnum; import com.pig4cloud.pig.common.core.exception.ErrorCodes; import com.pig4cloud.pig.common.core.util.MsgUtils; import com.pig4cloud.pig.common.core.util.R; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; /** *

@@ -65,7 +66,6 @@ import java.util.stream.Collectors; */ @Service @AllArgsConstructor -@Slf4j public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { private final SysRoleMenuMapper sysRoleMenuMapper; diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java index 2fff4c42915ed8a6de28baf61a2c2d9b79b77bbd..49c1e78da425ffdd965ec9e9d378fc65ec73a633 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java @@ -83,7 +83,7 @@ public class SysPublicParamServiceImpl extends ServiceImpl idList = this.baseMapper.selectBatchIds(CollUtil.toList(publicIds)) + List idList = this.baseMapper.selectByIds(CollUtil.toList(publicIds)) .stream() .filter(p -> !p.getSystemFlag().equals(DictTypeEnum.SYSTEM.getType()))// 系统内置的跳过不能删除 .map(SysPublicParam::getPublicId) diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java index 26553616b51601423d10f8b2db6649087dcc5a15..8c6729ad41211f07f0ef4c74577a0d6675bc058f 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java @@ -79,7 +79,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override @Cacheable(value = CacheConstants.ROLE_DETAILS, key = "#key", unless = "#result.isEmpty()") public List findRolesByRoleIds(List roleIdList, String key) { - return baseMapper.selectBatchIds(roleIdList); + return baseMapper.selectByIds(roleIdList); } /** diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java index cbe47097f05992b06e028f9915c24e467a1f9c16..192066c9cd07c0401cbe7f34288932000f3f25da 100644 --- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java +++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java @@ -189,7 +189,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) public Boolean deleteUserByIds(Long[] ids) { // 删除 spring cache - List userList = baseMapper.selectBatchIds(CollUtil.toList(ids)); + List userList = baseMapper.selectByIds(CollUtil.toList(ids)); Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS); for (SysUser sysUser : userList) { // 立即删除 diff --git a/pig-upms/pig-upms-biz/src/main/resources/logback-spring.xml b/pig-upms/pig-upms-biz/src/main/resources/logback-spring.xml index d0524a3301030f8b4e936434f8eee009b4584375..fc3e336940777491f2f6bcee84753272ea5d9bb1 100644 --- a/pig-upms/pig-upms-biz/src/main/resources/logback-spring.xml +++ b/pig-upms/pig-upms-biz/src/main/resources/logback-spring.xml @@ -61,7 +61,7 @@ - + diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTableColumnEntity.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTableColumnEntity.java index 65ee2a9f8a3f727fec295b3365429cc235e91bc3..aa2f9c9a398f3d9203e2d73b9454c826ba7eab63 100755 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTableColumnEntity.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTableColumnEntity.java @@ -149,7 +149,7 @@ public class GenTableColumnEntity extends Model { /** * 字段字典类型 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) + @TableField(updateStrategy = FieldStrategy.ALWAYS) private String fieldDict; } diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java index 543f12a555996a844f05cd0c0ee6252a13420e30..88e6718340ac50dbd8a0361199a28db7e9e3d536 100755 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java @@ -108,9 +108,9 @@ public class GenDatasourceConfServiceImpl extends ServiceImpl dynamicRoutingDataSource.removeDataSource(ds.getName())); - this.baseMapper.deleteBatchIds(CollUtil.toList(dsIds)); + this.baseMapper.deleteByIds(CollUtil.toList(dsIds)); return Boolean.TRUE; } diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenGroupServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenGroupServiceImpl.java index f1fedc5ef6e964ad68e75ebf8c6314712015b5dc..327347cf071fb4465b48499dad96b4cfb2326ef3 100644 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenGroupServiceImpl.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenGroupServiceImpl.java @@ -16,8 +16,11 @@ */ package com.pig4cloud.pig.codegen.service.impl; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; +import java.util.LinkedList; +import java.util.List; + +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pig.codegen.entity.GenGroupEntity; @@ -27,12 +30,10 @@ import com.pig4cloud.pig.codegen.service.GenGroupService; import com.pig4cloud.pig.codegen.service.GenTemplateGroupService; import com.pig4cloud.pig.codegen.util.vo.GroupVO; import com.pig4cloud.pig.codegen.util.vo.TemplateGroupDTO; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import java.util.LinkedList; -import java.util.List; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import lombok.AllArgsConstructor; /** * 模板分组 @@ -40,7 +41,6 @@ import java.util.List; * @author PIG * @date 2023-02-21 20:01:53 */ -@Slf4j @Service @AllArgsConstructor public class GenGroupServiceImpl extends ServiceImpl implements GenGroupService { @@ -77,8 +77,8 @@ public class GenGroupServiceImpl extends ServiceImpllambdaQuery().in(GenTemplateGroupEntity::getGroupId, ids)); + genTemplateGroupService.remove(Wrappers.lambdaQuery() + .in(GenTemplateGroupEntity::getGroupId, CollUtil.toList(ids))); } /** diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java index d1690dbaf10554cca53c0318d0ee18042366de47..b440b289b8fc6b2a415815a40f89b7f463da6d1e 100755 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java @@ -17,6 +17,30 @@ package com.pig4cloud.pig.codegen.service.impl; +import java.io.Serial; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.springframework.boot.SpringBootVersion; +import org.springframework.stereotype.Service; + +import com.pig4cloud.pig.codegen.config.PigCodeGenDefaultProperties; +import com.pig4cloud.pig.codegen.entity.GenTable; +import com.pig4cloud.pig.codegen.entity.GenTableColumnEntity; +import com.pig4cloud.pig.codegen.entity.GenTemplateEntity; +import com.pig4cloud.pig.codegen.service.GenFieldTypeService; +import com.pig4cloud.pig.codegen.service.GenGroupService; +import com.pig4cloud.pig.codegen.service.GenTableColumnService; +import com.pig4cloud.pig.codegen.service.GenTableService; +import com.pig4cloud.pig.codegen.service.GeneratorService; +import com.pig4cloud.pig.codegen.util.VelocityKit; +import com.pig4cloud.pig.codegen.util.vo.GroupVO; + import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; @@ -24,26 +48,8 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.NamingCase; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; -import com.pig4cloud.pig.codegen.config.PigCodeGenDefaultProperties; -import com.pig4cloud.pig.codegen.entity.GenTable; -import com.pig4cloud.pig.codegen.entity.GenTableColumnEntity; -import com.pig4cloud.pig.codegen.entity.GenTemplateEntity; -import com.pig4cloud.pig.codegen.service.*; -import com.pig4cloud.pig.codegen.util.VelocityKit; -import com.pig4cloud.pig.codegen.util.vo.GroupVO; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.SpringBootVersion; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; /** * @author lengleng @@ -51,7 +57,6 @@ import java.util.zip.ZipOutputStream; *

* 代码生成器 */ -@Slf4j @Service @RequiredArgsConstructor public class GeneratorServiceImpl implements GeneratorService { @@ -134,6 +139,9 @@ public class GeneratorServiceImpl implements GeneratorService { // 使用 map 简化代码 return new HashMap(4) { + @Serial + private static final long serialVersionUID = 1L; + { put("code", content); put("codePath", path); diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenCreateTableVO.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenCreateTableVO.java index fac44fd2d3bc53b6bc55037f15a0c38a00ebe82a..c2d413e2c241975f221a25d50dcabdbf0b5edf9b 100755 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenCreateTableVO.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenCreateTableVO.java @@ -16,12 +16,14 @@ package com.pig4cloud.pig.codegen.util.vo; * Author: luolin (766488893@qq.com) */ +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.time.LocalDateTime; - /** * 自动创建表管理 * @@ -30,8 +32,9 @@ import java.time.LocalDateTime; */ @Data @Schema(description = "自动创建表管理") -public class GenCreateTableVO { +public class GenCreateTableVO implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/TemplateGroupDTO.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/TemplateGroupDTO.java index 8ff23058ca206e8751afe597825b0a4f929b3b94..2a71f1db77030b2c380a3f38c0ceda5822d32518 100644 --- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/TemplateGroupDTO.java +++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/TemplateGroupDTO.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serial; import java.util.List; @Data @@ -12,6 +13,9 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class TemplateGroupDTO extends GenGroupEntity { + @Serial + private static final long serialVersionUID = 1L; + /** * 模板id集合 */ diff --git a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/SecuritySecureConfig.java b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/SecuritySecureConfig.java index 6fdc445420514c3e1b236986951f26ec8355a64d..27167be49e8dd4906440386da51e3bc95e95ffa3 100755 --- a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/SecuritySecureConfig.java +++ b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/SecuritySecureConfig.java @@ -16,11 +16,12 @@ package com.pig4cloud.pig.monitor.config; -import de.codecentric.boot.admin.server.config.AdminServerProperties; -import jakarta.servlet.DispatcherType; +import java.util.UUID; + import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.userdetails.User; @@ -33,12 +34,10 @@ import org.springframework.security.web.authentication.SavedRequestAwareAuthenti import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher; -import java.util.UUID; - -import static org.springframework.http.HttpMethod.DELETE; -import static org.springframework.http.HttpMethod.POST; +import de.codecentric.boot.admin.server.config.AdminServerProperties; +import jakarta.servlet.DispatcherType; /** * WebSecurityConfigurer @@ -65,13 +64,13 @@ public class SecuritySecureConfig { successHandler.setDefaultTargetUrl(this.adminServer.path("/")); http.authorizeHttpRequests((authorizeRequests) -> authorizeRequests // - .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/assets/**"))) + .requestMatchers(PathPatternRequestMatcher.withDefaults().matcher(this.adminServer.path("/assets/**"))) .permitAll() - .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/actuator/info"))) + .requestMatchers(PathPatternRequestMatcher.withDefaults().matcher(this.adminServer.path("/actuator/info"))) .permitAll() - .requestMatchers(new AntPathRequestMatcher(adminServer.path("/actuator/health"))) + .requestMatchers(PathPatternRequestMatcher.withDefaults().matcher(adminServer.path("/actuator/health"))) .permitAll() - .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/login"))) + .requestMatchers(PathPatternRequestMatcher.withDefaults().matcher(this.adminServer.path("/login"))) .permitAll() .dispatcherTypeMatchers(DispatcherType.ASYNC) .permitAll() // https://github.com/spring-projects/spring-security/issues/11027 @@ -86,9 +85,11 @@ public class SecuritySecureConfig { .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler()) .ignoringRequestMatchers( - new AntPathRequestMatcher(this.adminServer.path("/instances"), POST.toString()), // <6> - new AntPathRequestMatcher(this.adminServer.path("/instances/*"), DELETE.toString()), // <6> - new AntPathRequestMatcher(this.adminServer.path("/actuator/**")) // <7> + PathPatternRequestMatcher.withDefaults() + .matcher(HttpMethod.POST, this.adminServer.path("/instances")), // <6> + PathPatternRequestMatcher.withDefaults() + .matcher(HttpMethod.DELETE, this.adminServer.path("/instances/*")), // <6> + PathPatternRequestMatcher.withDefaults().matcher(this.adminServer.path("/actuator/**")) // <7> )); http.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600)); diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigInitQuartzJob.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigInitQuartzJob.java index 56f06fbfbf8ed709300eea71c5141ab2d143f53e..099495ce0e3c56a51ff5e3268e38f7b786726bf3 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigInitQuartzJob.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigInitQuartzJob.java @@ -17,21 +17,19 @@ package com.pig4cloud.pig.daemon.quartz.config; +import org.quartz.Scheduler; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.annotation.Configuration; + import com.pig4cloud.pig.daemon.quartz.constants.PigQuartzEnum; import com.pig4cloud.pig.daemon.quartz.service.SysJobService; import com.pig4cloud.pig.daemon.quartz.util.TaskUtil; + import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.quartz.Scheduler; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.annotation.Configuration; /** - * @author 郑健楠 - *

- * 初始化加载定时任务 + * @author 郑健楠 初始化加载定时任务 */ -@Slf4j @Configuration @AllArgsConstructor public class PigInitQuartzJob implements InitializingBean { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzFactory.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzFactory.java index 6617695f687ddab7ed0497eff48027d9966d31c4..5b1f35928d9759c21fc541a88af786ee5e198ebe 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzFactory.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzFactory.java @@ -17,22 +17,21 @@ package com.pig4cloud.pig.daemon.quartz.config; -import com.pig4cloud.pig.daemon.quartz.constants.PigQuartzEnum; -import com.pig4cloud.pig.daemon.quartz.entity.SysJob; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.springframework.beans.factory.annotation.Autowired; +import com.pig4cloud.pig.daemon.quartz.constants.PigQuartzEnum; +import com.pig4cloud.pig.daemon.quartz.entity.SysJob; + +import lombok.SneakyThrows; + /** - * @author 郑健楠 - * - *

* 动态任务工厂 + * + * @author 郑健楠 */ -@Slf4j @DisallowConcurrentExecution public class PigQuartzFactory implements Job { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzInvokeFactory.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzInvokeFactory.java index 75e4fa48e0b7e2e22b9c81c81b7809f9ea4203c9..de0048a0befc19c4b4780224f45358632c57c9f0 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzInvokeFactory.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzInvokeFactory.java @@ -17,20 +17,20 @@ package com.pig4cloud.pig.daemon.quartz.config; -import com.pig4cloud.pig.daemon.quartz.entity.SysJob; -import com.pig4cloud.pig.daemon.quartz.event.SysJobEvent; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.annotation.Aspect; import org.quartz.Trigger; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; +import com.pig4cloud.pig.daemon.quartz.entity.SysJob; +import com.pig4cloud.pig.daemon.quartz.event.SysJobEvent; + +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; + /** * @author 郑健楠 */ -@Slf4j @Aspect @Service @AllArgsConstructor diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJob.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJob.java index 3d3ca844015066df79e8f3437404e6f35c7e412d..32cdd6db8195abef067f74f9752fe09a070c58f4 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJob.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJob.java @@ -17,19 +17,21 @@ package com.pig4cloud.pig.daemon.quartz.entity; +import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.activerecord.Model; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; - /** * 定时任务调度表 * @@ -39,6 +41,7 @@ import java.time.LocalDateTime; @Builder @NoArgsConstructor @AllArgsConstructor +@EqualsAndHashCode(callSuper = false) @Schema(description = "定时任务") public class SysJob extends Model { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJobLog.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJobLog.java index 9418e668215cd7080760c7ad60b32e37802858de..57faeea51126a4e75e0b19aab5eae92220bbe4eb 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJobLog.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJobLog.java @@ -17,19 +17,21 @@ package com.pig4cloud.pig.daemon.quartz.entity; +import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.activerecord.Model; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; - /** * 定时任务执行日志表 * @@ -40,6 +42,7 @@ import java.time.LocalDateTime; @Builder @NoArgsConstructor @AllArgsConstructor +@EqualsAndHashCode(callSuper = false) @Schema(description = "定时任务日志") public class SysJobLog extends Model { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobListener.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobListener.java index 27e414020ebd8918b3d5ebae25a3614fde9b4fba..f2e511811ad354464883b45478f1adfd13cb4215 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobListener.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobListener.java @@ -17,20 +17,22 @@ package com.pig4cloud.pig.daemon.quartz.event; -import com.pig4cloud.pig.daemon.quartz.entity.SysJob; -import com.pig4cloud.pig.daemon.quartz.util.TaskInvokUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.quartz.Trigger; import org.springframework.context.event.EventListener; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import com.pig4cloud.pig.daemon.quartz.entity.SysJob; +import com.pig4cloud.pig.daemon.quartz.util.TaskInvokUtil; + +import lombok.RequiredArgsConstructor; + /** - * @author frwcloud 异步监听定时任务事件 + * 异步监听定时任务事件 + * + * @author frwcloud */ -@Slf4j @Service @RequiredArgsConstructor public class SysJobListener { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/exception/TaskException.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/exception/TaskException.java index 9ed8730f7b70221f168d294bec7acdf1fe2f74b6..fbcd3dabc632bfc167fadaefb948f6d6d86a0eec 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/exception/TaskException.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/exception/TaskException.java @@ -17,6 +17,8 @@ package com.pig4cloud.pig.daemon.quartz.exception; +import java.io.Serial; + /** * 定时任务异常 * @@ -24,6 +26,9 @@ package com.pig4cloud.pig.daemon.quartz.exception; */ public class TaskException extends Exception { + @Serial + private static final long serialVersionUID = 1L; + public TaskException() { super(); } diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobLogServiceImpl.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobLogServiceImpl.java index 23093c5fd047385f3f6c7672e90289fcb0019b32..adc68b2be9f0fb99133dd79c6238d1e77a1816ef 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobLogServiceImpl.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobLogServiceImpl.java @@ -17,13 +17,14 @@ package com.pig4cloud.pig.daemon.quartz.service.impl; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pig.daemon.quartz.entity.SysJobLog; import com.pig4cloud.pig.daemon.quartz.mapper.SysJobLogMapper; import com.pig4cloud.pig.daemon.quartz.service.SysJobLogService; + import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; /** * 定时任务执行日志表 @@ -31,7 +32,6 @@ import org.springframework.stereotype.Service; * @author frwcloud * @date 2019-01-27 13:40:20 */ -@Slf4j @Service @AllArgsConstructor public class SysJobLogServiceImpl extends ServiceImpl implements SysJobLogService { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobServiceImpl.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobServiceImpl.java index 3ccdc2613d3662102eae10a5467c7b6c31b4aaad..fc707cd51369a205b68f19e71419b49b37dac6c1 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobServiceImpl.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobServiceImpl.java @@ -17,13 +17,14 @@ package com.pig4cloud.pig.daemon.quartz.service.impl; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pig.daemon.quartz.entity.SysJob; import com.pig4cloud.pig.daemon.quartz.mapper.SysJobMapper; import com.pig4cloud.pig.daemon.quartz.service.SysJobService; + import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; /** * 定时任务调度表 @@ -31,7 +32,6 @@ import org.springframework.stereotype.Service; * @author frwcloud * @date 2019-01-27 10:04:42 */ -@Slf4j @Service @AllArgsConstructor public class SysJobServiceImpl extends ServiceImpl implements SysJobService { diff --git a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JavaClassTaskInvok.java b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JavaClassTaskInvok.java index d82060424c619041ecb90217d77d0e035ee5dd18..a1021c65961b1c5f2508b90470f56bf6ebf8c27b 100644 --- a/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JavaClassTaskInvok.java +++ b/pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JavaClassTaskInvok.java @@ -45,13 +45,13 @@ public class JavaClassTaskInvok implements ITaskInvok { try { if (StrUtil.isNotEmpty(sysJob.getMethodParamsValue())) { clazz = Class.forName(sysJob.getClassName()); - obj = clazz.newInstance(); + obj = clazz.getDeclaredConstructor().newInstance(); method = clazz.getDeclaredMethod(sysJob.getMethodName(), String.class); returnValue = method.invoke(obj, sysJob.getMethodParamsValue()); } else { clazz = Class.forName(sysJob.getClassName()); - obj = clazz.newInstance(); + obj = clazz.getDeclaredConstructor().newInstance(); method = clazz.getDeclaredMethod(sysJob.getMethodName()); returnValue = method.invoke(obj); } diff --git a/pom.xml b/pom.xml index 9a6a555ecf2f16ab4110e67bf29740f23a960495..4ba6903beaa94d30d68c223bea6810a5271089e8 100755 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,6 @@ 4.0.0 - com.pig4cloud pig ${project.artifactId} @@ -29,25 +28,21 @@ 3.8.2 - 3.4.1 - 2024.0.0 - 2023.0.3.2 + 3.5.0 + 2025.0.0 + 2023.0.3.3 UTF-8 + 3.5.0 17 17 - 3.3.5 - 1.39.0 0.0.3 + 1.12.785 + 4.0.5 + 3.0.5 2.2.4 - 1.12.675 2.4 3.1 1.10 - 3.0.5 - 4.0.5 - 3.0.5 - 3.0.0 - 2.4.0 0.45.1 http://192.168.0.100:2375 registry.cn-shanghai.aliyuncs.com @@ -91,17 +86,11 @@ lombok provided - + com.sun.xml.bind jaxb-impl - ${jaxb.version} - - - - org.springframework.boot - spring-boot-starter-test - test + ${jaxb.version} @@ -148,6 +137,19 @@ pom import + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + + spring-boot-starter-tomcat + org.springframework.boot + + +