refactor: 项目结构合理性优化

This commit is contained in:
haoxr
2023-06-03 11:03:12 +08:00
parent 808c33789c
commit 532b632ccc
124 changed files with 419 additions and 414 deletions

12
pom.xml
View File

@@ -37,10 +37,12 @@
<easyexcel.version>3.2.1</easyexcel.version> <easyexcel.version>3.2.1</easyexcel.version>
<!-- 分布式文件存储 --> <!-- 对象存储 -->
<minio.version>8.5.2</minio.version> <minio.version>8.5.2</minio.version>
<okhttp3.version>4.8.1</okhttp3.version> <okhttp3.version>4.8.1</okhttp3.version>
<aliyun-sdk-oss.version>3.16.3</aliyun-sdk-oss.version>
<!-- 验证码 --> <!-- 验证码 -->
<easy-captcha.version>1.6.2</easy-captcha.version> <easy-captcha.version>1.6.2</easy-captcha.version>
<nashorn.version>15.4</nashorn.version> <nashorn.version>15.4</nashorn.version>
@@ -174,13 +176,19 @@
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<!-- 分布式文件存储 --> <!-- MinIO 对象存储 -->
<dependency> <dependency>
<groupId>io.minio</groupId> <groupId>io.minio</groupId>
<artifactId>minio</artifactId> <artifactId>minio</artifactId>
<version>${minio.version}</version> <version>${minio.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-sdk-oss.version}</version>
</dependency>
<!-- 验证码 --> <!-- 验证码 -->
<dependency> <dependency>
<groupId>com.github.whvcse</groupId> <groupId>com.github.whvcse</groupId>

View File

@@ -1,10 +1,11 @@
package com.youlai.system.framework.resubmit; package com.youlai.system.aspect;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.exception.BusinessException; import com.youlai.system.common.exception.BusinessException;
import com.youlai.system.common.result.ResultCode; import com.youlai.system.common.result.ResultCode;
import com.youlai.system.common.util.RequestUtils; import com.youlai.system.common.util.RequestUtils;
import com.youlai.system.framework.security.JwtTokenManager; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.security.JwtTokenManager;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -21,50 +22,48 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* 重复提交切面 * 处理重复提交切面
* *
* @author : haoxr * @author haoxr
* @since : 2023/05/09 * @since 2023/05/09
*/ */
@Aspect @Aspect
@Component @Component
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class ResubmitAspect { public class DuplicateSubmitAspect {
private final RedissonClient redissonClient; private final RedissonClient redissonClient;
private final JwtTokenManager jwtTokenManager; private final JwtTokenManager jwtTokenManager;
private static final String RESUBMIT_LOCK_PREFIX = "LOCK:RESUBMIT:"; private static final String RESUBMIT_LOCK_PREFIX = "LOCK:RESUBMIT:";
/** /**
* 防重复提交切点 * 防重复提交切点
*/ */
@Pointcut("@annotation(resubmit)") @Pointcut("@annotation(preventDuplicateSubmit)")
public void preventDuplicateSubmitPointCut(Resubmit resubmit) { public void preventDuplicateSubmitPointCut(PreventDuplicateSubmit preventDuplicateSubmit) {
log.info("定义防重复提交切点"); log.info("定义防重复提交切点");
} }
@Around("preventDuplicateSubmitPointCut(resubmit)") @Around("preventDuplicateSubmitPointCut(preventDuplicateSubmit)")
public Object doAround(ProceedingJoinPoint pjp, Resubmit resubmit) throws Throwable { public Object doAround(ProceedingJoinPoint pjp, PreventDuplicateSubmit preventDuplicateSubmit) throws Throwable {
String resubmitLockKey = generateResubmitLockKey(); String resubmitLockKey = generateResubmitLockKey();
if (resubmitLockKey != null) { if (resubmitLockKey != null) {
int expire = resubmit.expire(); // 防重提交锁过期时间 int expire = preventDuplicateSubmit.expire(); // 防重提交锁过期时间
RLock lock = redissonClient.getLock(resubmitLockKey); RLock lock = redissonClient.getLock(resubmitLockKey);
boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败直接返回 false
if (!lockResult) { if (!lockResult) {
throw new BusinessException(ResultCode.REPEAT_SUBMIT_ERROR); // 抛出重复提交提示信息 throw new BusinessException(ResultCode.REPEAT_SUBMIT_ERROR); // 抛出重复提交提示信息
} }
} }
Object result = pjp.proceed(); return pjp.proceed();
return result;
} }
/** /**
* 获取重提交锁的 key * 获取重提交锁的 key
*/ */
private String generateResubmitLockKey() { private String generateResubmitLockKey() {
String resubmitLockKey = null; String resubmitLockKey = null;
@@ -72,7 +71,7 @@ public class ResubmitAspect {
String jwt = RequestUtils.resolveToken(request); String jwt = RequestUtils.resolveToken(request);
if (StrUtil.isNotBlank(jwt)) { if (StrUtil.isNotBlank(jwt)) {
String jti = (String) jwtTokenManager.getTokenClaims(jwt).get("jti"); String jti = (String) jwtTokenManager.getTokenClaims(jwt).get("jti");
resubmitLockKey = RESUBMIT_LOCK_PREFIX + jti + ":" + request.getMethod() + "-" + request.getRequestURI() + "-"; resubmitLockKey = RESUBMIT_LOCK_PREFIX + jti + ":" + request.getMethod() + "-" + request.getRequestURI();
} }
return resubmitLockKey; return resubmitLockKey;
} }

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.mybatisplus; package com.youlai.system.common.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;
@@ -8,7 +8,7 @@ import java.lang.annotation.*;
* https://gitee.com/baomidou/mybatis-plus/issues/I37I90 * https://gitee.com/baomidou/mybatis-plus/issues/I37I90
* *
* @author <a href="mailto:2256222053@qq.com">zc</a> * @author <a href="mailto:2256222053@qq.com">zc</a>
* @date 2021-12-10 * @since 2021-12-10
*/ */
@Documented @Documented
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@@ -1,19 +1,19 @@
package com.youlai.system.framework.resubmit; package com.youlai.system.common.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
* 提交注解 * 止重复提交注解
* *
* @author haoxr * @author haoxr
* @since 2023/5/9 * @since 2.3.0
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
@Inherited @Inherited
public @interface Resubmit { public @interface PreventDuplicateSubmit {
/** /**
* 防重提交锁过期时间() * 防重提交锁过期时间()

View File

@@ -8,7 +8,7 @@ import lombok.Data;
* 基础分页请求对象 * 基础分页请求对象
* *
* @author haoxr * @author haoxr
* @date 2021/2/28 * @since 2021/2/28
*/ */
@Data @Data
@Schema @Schema

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
* 视图对象基类 * 视图对象基类
* *
* @author haoxr * @author haoxr
* @date 2022/10/22 * @since 2022/10/22
*/ */
@Data @Data
@ToString @ToString

View File

@@ -10,7 +10,7 @@ import java.util.Objects;
* 枚举通用接口 * 枚举通用接口
* *
* @author haoxr * @author haoxr
* @date 2022/3/27 12:06 * @since 2022/3/27 12:06
*/ */
public interface IBaseEnum<T> { public interface IBaseEnum<T> {

View File

@@ -3,8 +3,8 @@ package com.youlai.system.common.constant;
/** /**
* Excel 常量 * Excel 常量
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
public interface ExcelConstants { public interface ExcelConstants {

View File

@@ -3,8 +3,8 @@ package com.youlai.system.common.constant;
/** /**
* Security 常量 * Security 常量
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
public interface SecurityConstants { public interface SecurityConstants {

View File

@@ -1,10 +1,10 @@
package com.youlai.system.framework.easycaptcha.enums; package com.youlai.system.common.enums;
/** /**
* EasyCaptcha 验证码类型枚举 * EasyCaptcha 验证码类型枚举
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
public enum CaptchaTypeEnum { public enum CaptchaTypeEnum {

View File

@@ -7,7 +7,7 @@ import lombok.Getter;
* 数据权限枚举 * 数据权限枚举
* *
* @author haoxr * @author haoxr
* @date 2022/10/14 * @since 2022/10/14
*/ */
public enum DataScopeEnum implements IBaseEnum<Integer> { public enum DataScopeEnum implements IBaseEnum<Integer> {

View File

@@ -8,7 +8,7 @@ import lombok.Getter;
* 性别枚举 * 性别枚举
* *
* @author haoxr * @author haoxr
* @date 2022/10/14 * @since 2022/10/14
*/ */
@Schema(enumAsRef = true) @Schema(enumAsRef = true)
public enum GenderEnum implements IBaseEnum<Integer> { public enum GenderEnum implements IBaseEnum<Integer> {

View File

@@ -8,7 +8,7 @@ import lombok.Getter;
* 菜单类型枚举 * 菜单类型枚举
* *
* @author haoxr * @author haoxr
* @date 2022/4/23 9:36 * @since 2022/4/23 9:36
*/ */
public enum MenuTypeEnum implements IBaseEnum<Integer> { public enum MenuTypeEnum implements IBaseEnum<Integer> {

View File

@@ -7,7 +7,7 @@ import lombok.Getter;
* 状态枚举 * 状态枚举
* *
* @author haoxr * @author haoxr
* @date 2022/10/14 * @since 2022/10/14
*/ */
public enum StatusEnum implements IBaseEnum<Integer> { public enum StatusEnum implements IBaseEnum<Integer> {

View File

@@ -7,7 +7,7 @@ import lombok.Getter;
* 自定义业务异常 * 自定义业务异常
* *
* @author haoxr * @author haoxr
* @date 2022/7/31 * @since 2022/7/31
*/ */
@Getter @Getter
public class BusinessException extends RuntimeException { public class BusinessException extends RuntimeException {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.common.model;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@@ -11,7 +11,7 @@ import java.util.List;
* 下拉选项对象 * 下拉选项对象
* *
* @author haoxr * @author haoxr
* @date 2022/1/22 * @since 2022/1/22
*/ */
@Schema(description ="下拉选项对象") @Schema(description ="下拉选项对象")
@Data @Data

View File

@@ -10,7 +10,7 @@ import java.util.List;
* 分页响应结构体 * 分页响应结构体
* *
* @author haoxr * @author haoxr
* @date 2022/2/18 23:29 * @since 2022/2/18 23:29
*/ */
@Data @Data
public class PageResult<T> implements Serializable { public class PageResult<T> implements Serializable {

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
* 统一响应结构体 * 统一响应结构体
* *
* @author haoxr * @author haoxr
* @date 2022/1/30 * @since 2022/1/30
**/ **/
@Data @Data
public class Result<T> implements Serializable { public class Result<T> implements Serializable {

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
* 响应码枚举 * 响应码枚举
* *
* @author haoxr * @author haoxr
* @date 2020-06-23 * @since 2020-06-23
**/ **/
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor

View File

@@ -1,21 +1,20 @@
package com.youlai.system.common.util; package com.youlai.system.common.util;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.youlai.system.framework.easyexcel.MyAnalysisEventListener; import com.youlai.system.listener.easyexcel.MyAnalysisEventListener;
import java.io.InputStream; import java.io.InputStream;
/** /**
* Excel 工具类 * Excel 工具类
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/01 * @since 2023/03/01
*/ */
public class ExcelUtils { public class ExcelUtils {
public static <T> String importExcel(InputStream is, Class clazz, MyAnalysisEventListener<T> listener) { public static <T> String importExcel(InputStream is, Class clazz, MyAnalysisEventListener<T> listener) {
EasyExcel.read(is, clazz, listener).sheet().doRead(); EasyExcel.read(is, clazz, listener).sheet().doRead();
String msg = listener.getMsg(); return listener.getMsg();
return msg;
} }
} }

View File

@@ -14,7 +14,7 @@ import java.io.IOException;
* 响应工具类 * 响应工具类
* *
* @author haoxr * @author haoxr
* @date 2022/10/18 * @since 2022/10/18
*/ */
public class ResponseUtils { public class ResponseUtils {

View File

@@ -1,10 +1,10 @@
package com.youlai.system.framework.security.util; package com.youlai.system.common.util;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SystemConstants; import com.youlai.system.common.constant.SystemConstants;
import com.youlai.system.framework.security.userdetails.SysUserDetails; import com.youlai.system.security.userdetails.SysUserDetails;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;

View File

@@ -1,6 +1,6 @@
package com.youlai.system.framework.easycaptcha.config; package com.youlai.system.config;
import com.youlai.system.framework.easycaptcha.enums.CaptchaTypeEnum; import com.youlai.system.common.enums.CaptchaTypeEnum;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -10,13 +10,13 @@ import java.awt.*;
/** /**
* EasyCaptcha 配置类 * EasyCaptcha 配置类
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
@ConfigurationProperties(prefix = "easy-captcha") @ConfigurationProperties(prefix = "easy-captcha")
@Configuration @Configuration
@Data @Data
public class EasyCaptchaConfig { public class CaptchaConfig {
/** /**
* 验证码类型 * 验证码类型

View File

@@ -10,10 +10,10 @@ import org.springframework.web.filter.CorsFilter;
import java.util.Collections; import java.util.Collections;
/** /**
* CORS资源共享配置 * CORS 资源共享配置
* *
* @author haoxr * @author haoxr
* @date 2023/4/17 * @since 2023/4/17
*/ */
@Configuration @Configuration
public class CorsConfig { public class CorsConfig {

View File

@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.youlai.system.framework.mybatisplus.MyDataPermissionHandler; import com.youlai.system.handler.mybatisplus.MyDataPermissionHandler;
import com.youlai.system.framework.mybatisplus.MyMetaObjectHandler; import com.youlai.system.handler.mybatisplus.MyMetaObjectHandler;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -23,7 +23,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
public class MybatisPlusConfig { public class MybatisPlusConfig {
@Value("${system-config.data-permission.enabled}") @Value("${system.config.data-permission-enabled}")
private Boolean dataPermissionEnabled; private Boolean dataPermissionEnabled;
/** /**

View File

@@ -1,20 +1,21 @@
package com.youlai.system.framework.security.config; package com.youlai.system.config;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.framework.security.filter.JwtAuthenticationFilter; import com.youlai.system.filter.JwtAuthenticationFilter;
import com.youlai.system.framework.security.exception.MyAccessDeniedHandler; import com.youlai.system.security.exception.MyAccessDeniedHandler;
import com.youlai.system.framework.security.exception.MyAuthenticationEntryPoint; import com.youlai.system.security.exception.MyAuthenticationEntryPoint;
import com.youlai.system.framework.security.JwtTokenManager; import com.youlai.system.security.JwtTokenManager;
import com.youlai.system.framework.security.filter.VerifyCodeFilter; import com.youlai.system.filter.VerifyCodeFilter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -25,31 +26,33 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
* Spring Security 权限配置 * Spring Security 权限配置
* *
* @author haoxr * @author haoxr
* @date 2023/2/17 * @since 2023/2/17
*/ */
@Configuration @Configuration
@EnableWebSecurity @EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) @EnableMethodSecurity
@RequiredArgsConstructor @RequiredArgsConstructor
public class SecurityConfig { public class SecurityConfig {
private final MyAuthenticationEntryPoint myAuthenticationEntryPoint; private final MyAuthenticationEntryPoint authenticationEntryPoint;
private final MyAccessDeniedHandler myAccessDeniedHandler; private final MyAccessDeniedHandler accessDeniedHandler;
private final JwtTokenManager jwtTokenManager; private final JwtTokenManager jwtTokenManager;
@Bean @Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http http
.csrf().disable() .authorizeHttpRequests(requestMatcherRegistry ->
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) requestMatcherRegistry.requestMatchers(SecurityConstants.LOGIN_PATH).permitAll()
.and() .anyRequest().authenticated()
.authorizeHttpRequests() )
.requestMatchers(SecurityConstants.LOGIN_PATH).permitAll() // 登录接口放行但会走过滤器链-验证码校验 .sessionManagement(configurer -> configurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.anyRequest().authenticated() .exceptionHandling(httpSecurityExceptionHandlingConfigurer ->
.and() httpSecurityExceptionHandlingConfigurer
.exceptionHandling() .authenticationEntryPoint(authenticationEntryPoint)
.authenticationEntryPoint(myAuthenticationEntryPoint) .accessDeniedHandler(accessDeniedHandler)
.accessDeniedHandler(myAccessDeniedHandler) )
.csrf(AbstractHttpConfigurer::disable)
; ;
// 验证码校验过滤器 // 验证码校验过滤器
@@ -63,7 +66,6 @@ public class SecurityConfig {
/** /**
* 不走过滤器链的放行配置 * 不走过滤器链的放行配置
* *
* @return
*/ */
@Bean @Bean
public WebSecurityCustomizer webSecurityCustomizer() { public WebSecurityCustomizer webSecurityCustomizer() {
@@ -74,7 +76,8 @@ public class SecurityConfig {
"/doc.html", "/doc.html",
"/swagger-resources/**", "/swagger-resources/**",
"/v3/api-docs/**", "/v3/api-docs/**",
"/swagger-ui/**" "/swagger-ui/**",
"/ws/**"
); );
} }

View File

@@ -20,7 +20,7 @@ import java.util.TreeMap;
* Spring Doc FAQ: https://springdoc.org/#faq * Spring Doc FAQ: https://springdoc.org/#faq
* *
* @author haoxr * @author haoxr
* @date 2023/2/17 * @since 2023/2/17
*/ */
@Configuration @Configuration
public class SwaggerConfig { public class SwaggerConfig {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.xxljob; package com.youlai.system.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -13,7 +13,8 @@ import org.springframework.context.annotation.Configuration;
* @author xuxueli 2017-04-28 * @author xuxueli 2017-04-28
*/ */
@Configuration @Configuration
@ConditionalOnProperty(name = "xxl.job.enabled")// xxl.job.enabled = true 才会自动配 // system.config.xxl-job-enabled = true 才会自动
@ConditionalOnProperty(name = "system.config.xxl-job-enabled")
@Slf4j @Slf4j
public class XxlJobConfig { public class XxlJobConfig {

View File

@@ -4,10 +4,10 @@ import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.common.util.RequestUtils; import com.youlai.system.common.util.RequestUtils;
import com.youlai.system.framework.easycaptcha.service.EasyCaptchaService; import com.youlai.system.security.captcha.EasyCaptchaService;
import com.youlai.system.pojo.dto.CaptchaResult; import com.youlai.system.model.dto.CaptchaResult;
import com.youlai.system.pojo.dto.LoginResult; import com.youlai.system.model.dto.LoginResult;
import com.youlai.system.framework.security.JwtTokenManager; import com.youlai.system.security.JwtTokenManager;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;

View File

@@ -1,11 +1,11 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.youlai.system.framework.resubmit.Resubmit; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.DeptForm; import com.youlai.system.model.form.DeptForm;
import com.youlai.system.pojo.query.DeptQuery; import com.youlai.system.model.query.DeptQuery;
import com.youlai.system.pojo.vo.DeptVO; import com.youlai.system.model.vo.DeptVO;
import com.youlai.system.service.SysDeptService; import com.youlai.system.service.SysDeptService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -59,7 +59,7 @@ public class SysDeptController {
@Operation(summary = "新增部门", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增部门", security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:dept:add')") @PreAuthorize("@ss.hasPerm('sys:dept:add')")
@Resubmit @PreventDuplicateSubmit
public Result saveDept( public Result saveDept(
@Valid @RequestBody DeptForm formData @Valid @RequestBody DeptForm formData
) { ) {

View File

@@ -3,14 +3,14 @@ package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.framework.resubmit.Resubmit; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.pojo.form.DictForm; import com.youlai.system.model.form.DictForm;
import com.youlai.system.pojo.form.DictTypeForm; import com.youlai.system.model.form.DictTypeForm;
import com.youlai.system.pojo.query.DictPageQuery; import com.youlai.system.model.query.DictPageQuery;
import com.youlai.system.pojo.query.DictTypePageQuery; import com.youlai.system.model.query.DictTypePageQuery;
import com.youlai.system.pojo.vo.DictPageVO; import com.youlai.system.model.vo.DictPageVO;
import com.youlai.system.pojo.vo.DictTypePageVO; import com.youlai.system.model.vo.DictTypePageVO;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.service.SysDictService; import com.youlai.system.service.SysDictService;
import com.youlai.system.service.SysDictTypeService; import com.youlai.system.service.SysDictTypeService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@@ -55,7 +55,7 @@ public class SysDictController {
@Operation(summary = "新增字典", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增字典", security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:dict:add')") @PreAuthorize("@ss.hasPerm('sys:dict:add')")
@Resubmit @PreventDuplicateSubmit
public Result saveDict( public Result saveDict(
@RequestBody DictForm DictForm @RequestBody DictForm DictForm
) { ) {
@@ -117,7 +117,7 @@ public class SysDictController {
@Operation(summary = "新增字典类型", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增字典类型", security = {@SecurityRequirement(name = "Authorization")})
@PostMapping("/types") @PostMapping("/types")
@PreAuthorize("@ss.hasPerm('sys:dict_type:add')") @PreAuthorize("@ss.hasPerm('sys:dict_type:add')")
@Resubmit @PreventDuplicateSubmit
public Result saveDictType(@RequestBody DictTypeForm dictTypeForm) { public Result saveDictType(@RequestBody DictTypeForm dictTypeForm) {
boolean result = dictTypeService.saveDictType(dictTypeForm); boolean result = dictTypeService.saveDictType(dictTypeForm);
return Result.judge(result); return Result.judge(result);

View File

@@ -1,12 +1,12 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.framework.resubmit.Resubmit; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.pojo.form.MenuForm; import com.youlai.system.model.form.MenuForm;
import com.youlai.system.pojo.query.MenuQuery; import com.youlai.system.model.query.MenuQuery;
import com.youlai.system.pojo.vo.MenuVO; import com.youlai.system.model.vo.MenuVO;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.pojo.vo.RouteVO; import com.youlai.system.model.vo.RouteVO;
import com.youlai.system.service.SysMenuService; import com.youlai.system.service.SysMenuService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@@ -25,7 +25,7 @@ import java.util.List;
* 菜单控制器 * 菜单控制器
* *
* @author haoxr * @author haoxr
* @date 2020/11/06 * @since 2020/11/06
*/ */
@Tag(name = "04.菜单接口") @Tag(name = "04.菜单接口")
@RestController @RestController
@@ -69,7 +69,7 @@ public class SysMenuController {
@Operation(summary = "新增菜单",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增菜单",security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:menu:add')") @PreAuthorize("@ss.hasPerm('sys:menu:add')")
@Resubmit @PreventDuplicateSubmit
@CacheEvict(cacheNames = "system", key = "'routes'") @CacheEvict(cacheNames = "system", key = "'routes'")
public Result addMenu(@RequestBody MenuForm menuForm) { public Result addMenu(@RequestBody MenuForm menuForm) {
boolean result = menuService.saveMenu(menuForm); boolean result = menuService.saveMenu(menuForm);

View File

@@ -1,13 +1,13 @@
package com.youlai.system.controller; package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.framework.resubmit.Resubmit; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.RoleForm; import com.youlai.system.model.form.RoleForm;
import com.youlai.system.pojo.query.RolePageQuery; import com.youlai.system.model.query.RolePageQuery;
import com.youlai.system.pojo.vo.RolePageVO; import com.youlai.system.model.vo.RolePageVO;
import com.youlai.system.service.SysRoleService; import com.youlai.system.service.SysRoleService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -48,7 +48,7 @@ public class SysRoleController {
@Operation(summary = "新增角色",security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增角色",security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:role:add')") @PreAuthorize("@ss.hasPerm('sys:role:add')")
@Resubmit @PreventDuplicateSubmit
public Result addRole(@Valid @RequestBody RoleForm roleForm) { public Result addRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm); boolean result = roleService.saveRole(roleForm);
return Result.judge(result); return Result.judge(result);

View File

@@ -8,15 +8,15 @@ import com.youlai.system.common.constant.ExcelConstants;
import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result; import com.youlai.system.common.result.Result;
import com.youlai.system.common.util.ExcelUtils; import com.youlai.system.common.util.ExcelUtils;
import com.youlai.system.framework.resubmit.Resubmit; import com.youlai.system.common.annotation.PreventDuplicateSubmit;
import com.youlai.system.listener.UserImportListener; import com.youlai.system.listener.easyexcel.UserImportListener;
import com.youlai.system.pojo.vo.UserImportVO; import com.youlai.system.model.vo.UserImportVO;
import com.youlai.system.pojo.form.UserForm; import com.youlai.system.model.form.UserForm;
import com.youlai.system.pojo.entity.SysUser; import com.youlai.system.model.entity.SysUser;
import com.youlai.system.pojo.query.UserPageQuery; import com.youlai.system.model.query.UserPageQuery;
import com.youlai.system.pojo.vo.UserExportVO; import com.youlai.system.model.vo.UserExportVO;
import com.youlai.system.pojo.vo.UserInfoVO; import com.youlai.system.model.vo.UserInfoVO;
import com.youlai.system.pojo.vo.UserPageVO; import com.youlai.system.model.vo.UserPageVO;
import com.youlai.system.service.SysUserService; import com.youlai.system.service.SysUserService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -43,7 +43,7 @@ import java.util.List;
* 用户控制器 * 用户控制器
* *
* @author haoxr * @author haoxr
* @date 2022/10/16 * @since 2022/10/16
*/ */
@Tag(name = "02.用户接口") @Tag(name = "02.用户接口")
@RestController @RestController
@@ -65,7 +65,7 @@ public class SysUserController {
@Operation(summary = "新增用户", security = {@SecurityRequirement(name = "Authorization")}) @Operation(summary = "新增用户", security = {@SecurityRequirement(name = "Authorization")})
@PostMapping @PostMapping
@PreAuthorize("@ss.hasPerm('sys:user:add')") @PreAuthorize("@ss.hasPerm('sys:user:add')")
@Resubmit @PreventDuplicateSubmit
public Result saveUser( public Result saveUser(
@RequestBody @Valid UserForm userForm @RequestBody @Valid UserForm userForm
) { ) {

View File

@@ -1,15 +1,15 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.youlai.system.pojo.entity.SysDept; import com.youlai.system.model.entity.SysDept;
import com.youlai.system.pojo.form.DeptForm; import com.youlai.system.model.form.DeptForm;
import com.youlai.system.pojo.vo.DeptVO; import com.youlai.system.model.vo.DeptVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
* 部门对象转换器 * 部门对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/7/29 * @since 2022/7/29
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DeptConverter { public interface DeptConverter {

View File

@@ -1,9 +1,9 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.pojo.entity.SysDict; import com.youlai.system.model.entity.SysDict;
import com.youlai.system.pojo.form.DictForm; import com.youlai.system.model.form.DictForm;
import com.youlai.system.pojo.vo.DictPageVO; import com.youlai.system.model.vo.DictPageVO;
import org.mapstruct.InheritInverseConfiguration; import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@@ -11,7 +11,7 @@ import org.mapstruct.Mapper;
* 字典数据项对象转换器 * 字典数据项对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/6/8 * @since 2022/6/8
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DictConverter { public interface DictConverter {

View File

@@ -1,16 +1,16 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.pojo.entity.SysDictType; import com.youlai.system.model.entity.SysDictType;
import com.youlai.system.pojo.form.DictTypeForm; import com.youlai.system.model.form.DictTypeForm;
import com.youlai.system.pojo.vo.DictTypePageVO; import com.youlai.system.model.vo.DictTypePageVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
* 字典类型对象转换器 * 字典类型对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/6/8 * @since 2022/6/8
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DictTypeConverter { public interface DictTypeConverter {

View File

@@ -1,15 +1,15 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.youlai.system.pojo.entity.SysMenu; import com.youlai.system.model.entity.SysMenu;
import com.youlai.system.pojo.form.MenuForm; import com.youlai.system.model.form.MenuForm;
import com.youlai.system.pojo.vo.MenuVO; import com.youlai.system.model.vo.MenuVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
* 菜单对象转换器 * 菜单对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/7/29 * @since 2022/7/29
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface MenuConverter { public interface MenuConverter {

View File

@@ -1,10 +1,10 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.pojo.vo.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.pojo.entity.SysRole; import com.youlai.system.model.entity.SysRole;
import com.youlai.system.pojo.form.RoleForm; import com.youlai.system.model.form.RoleForm;
import com.youlai.system.pojo.vo.RolePageVO; import com.youlai.system.model.vo.RolePageVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
@@ -15,7 +15,7 @@ import java.util.List;
* 角色对象转换器 * 角色对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/5/29 * @since 2022/5/29
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface RoleConverter { public interface RoleConverter {

View File

@@ -1,13 +1,13 @@
package com.youlai.system.converter; package com.youlai.system.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.pojo.bo.UserBO; import com.youlai.system.model.bo.UserBO;
import com.youlai.system.pojo.entity.SysUser; import com.youlai.system.model.entity.SysUser;
import com.youlai.system.pojo.form.UserForm; import com.youlai.system.model.form.UserForm;
import com.youlai.system.pojo.bo.UserFormBO; import com.youlai.system.model.bo.UserFormBO;
import com.youlai.system.pojo.vo.UserImportVO; import com.youlai.system.model.vo.UserImportVO;
import com.youlai.system.pojo.vo.UserInfoVO; import com.youlai.system.model.vo.UserInfoVO;
import com.youlai.system.pojo.vo.UserPageVO; import com.youlai.system.model.vo.UserPageVO;
import org.mapstruct.InheritInverseConfiguration; import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
@@ -17,7 +17,7 @@ import org.mapstruct.Mappings;
* 用户对象转换器 * 用户对象转换器
* *
* @author haoxr * @author haoxr
* @date 2022/6/8 * @since 2022/6/8
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface UserConverter { public interface UserConverter {

View File

@@ -1,11 +1,11 @@
package com.youlai.system.framework.security.filter; package com.youlai.system.filter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.common.result.ResultCode; import com.youlai.system.common.result.ResultCode;
import com.youlai.system.common.util.RequestUtils; import com.youlai.system.common.util.RequestUtils;
import com.youlai.system.common.util.ResponseUtils; import com.youlai.system.common.util.ResponseUtils;
import com.youlai.system.framework.security.JwtTokenManager; import com.youlai.system.security.JwtTokenManager;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
@@ -22,7 +22,7 @@ import java.io.IOException;
* JWT 校验过滤器 * JWT 校验过滤器
* *
* @author haoxr * @author haoxr
* @date 2022/10/1 * @since 2022/10/1
*/ */
public class JwtAuthenticationFilter extends OncePerRequestFilter { public class JwtAuthenticationFilter extends OncePerRequestFilter {

View File

@@ -8,8 +8,8 @@ import org.springframework.web.filter.CommonsRequestLoggingFilter;
/** /**
* 请求日志打印过滤器 * 请求日志打印过滤器
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/03 * @since 2023/03/03
*/ */
@Configuration @Configuration
@Slf4j @Slf4j

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.security.filter; package com.youlai.system.filter;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -21,7 +21,7 @@ import java.io.IOException;
* 验证码校验过滤器 * 验证码校验过滤器
* *
* @author haoxr * @author haoxr
* @date 2022/10/1 * @since 2022/10/1
*/ */
public class VerifyCodeFilter extends OncePerRequestFilter { public class VerifyCodeFilter extends OncePerRequestFilter {

View File

@@ -1,12 +1,13 @@
package com.youlai.system.framework.mybatisplus; package com.youlai.system.handler.mybatisplus;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
import com.youlai.system.common.annotation.DataPermission;
import com.youlai.system.common.base.IBaseEnum; import com.youlai.system.common.base.IBaseEnum;
import com.youlai.system.common.enums.DataScopeEnum; import com.youlai.system.common.enums.DataScopeEnum;
import com.youlai.system.framework.security.util.SecurityUtils; import com.youlai.system.common.util.SecurityUtils;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
@@ -19,7 +20,7 @@ import java.lang.reflect.Method;
* 数据权限控制器 * 数据权限控制器
* *
* @author zc * @author zc
* @date 2021-12-10 13:28 * @since 2021-12-10 13:28
*/ */
@Slf4j @Slf4j
public class MyDataPermissionHandler implements DataPermissionHandler { public class MyDataPermissionHandler implements DataPermissionHandler {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.mybatisplus; package com.youlai.system.handler.mybatisplus;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.MetaObject;
@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
* mybatis-plus 字段自动填充 * mybatis-plus 字段自动填充
* *
* @author haoxr * @author haoxr
* @date 2022/10/14 * @since 2022/10/14
* @link https://mp.baomidou.com/guide/auto-fill-metainfo.html * @link https://mp.baomidou.com/guide/auto-fill-metainfo.html
*/ */
@Component @Component

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.xxljob; package com.youlai.system.handler.xxljob;
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;

View File

@@ -1,12 +1,12 @@
package com.youlai.system.framework.easyexcel; package com.youlai.system.listener.easyexcel;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
/** /**
* 自定义解析结果监听器 * 自定义解析结果监听器
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/01 * @since 2023/03/01
*/ */
public abstract class MyAnalysisEventListener<T> extends AnalysisEventListener<T> { public abstract class MyAnalysisEventListener<T> extends AnalysisEventListener<T> {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.listener; package com.youlai.system.listener.easyexcel;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
@@ -12,11 +12,10 @@ import com.youlai.system.common.constant.SystemConstants;
import com.youlai.system.common.enums.GenderEnum; import com.youlai.system.common.enums.GenderEnum;
import com.youlai.system.common.enums.StatusEnum; import com.youlai.system.common.enums.StatusEnum;
import com.youlai.system.converter.UserConverter; import com.youlai.system.converter.UserConverter;
import com.youlai.system.framework.easyexcel.MyAnalysisEventListener; import com.youlai.system.model.entity.SysRole;
import com.youlai.system.pojo.entity.SysRole; import com.youlai.system.model.entity.SysUser;
import com.youlai.system.pojo.entity.SysUser; import com.youlai.system.model.entity.SysUserRole;
import com.youlai.system.pojo.entity.SysUserRole; import com.youlai.system.model.vo.UserImportVO;
import com.youlai.system.pojo.vo.UserImportVO;
import com.youlai.system.service.SysRoleService; import com.youlai.system.service.SysRoleService;
import com.youlai.system.service.SysUserRoleService; import com.youlai.system.service.SysUserRoleService;
import com.youlai.system.service.SysUserService; import com.youlai.system.service.SysUserService;

View File

@@ -0,0 +1,8 @@
package com.youlai.system.listener.rabbitmq;
/**
* @author haoxr
* @since 0.0.1
*/
public class TestListener {
}

View File

@@ -3,8 +3,8 @@ package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.youlai.system.framework.mybatisplus.DataPermission; import com.youlai.system.common.annotation.DataPermission;
import com.youlai.system.pojo.entity.SysDept; import com.youlai.system.model.entity.SysDept;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysDict; import com.youlai.system.model.entity.SysDict;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper

View File

@@ -1,7 +1,7 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysDictType; import com.youlai.system.model.entity.SysDictType;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper

View File

@@ -4,12 +4,12 @@ package com.youlai.system.mapper;
* 菜单持久接口层 * 菜单持久接口层
* *
* @author haoxr * @author haoxr
* @date 2022/1/24 * @since 2022/1/24
*/ */
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysMenu; import com.youlai.system.model.entity.SysMenu;
import com.youlai.system.pojo.bo.RouteBO; import com.youlai.system.model.bo.RouteBO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysRole; import com.youlai.system.model.entity.SysRole;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.Set; import java.util.Set;

View File

@@ -1,7 +1,7 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysRoleMenu; import com.youlai.system.model.entity.SysRoleMenu;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@@ -10,7 +10,7 @@ import java.util.List;
* 角色菜单持久层 * 角色菜单持久层
* *
* @author haoxr * @author haoxr
* @date 2022/6/4 * @since 2022/6/4
*/ */
@Mapper @Mapper
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> { public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {

View File

@@ -2,13 +2,13 @@ package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.framework.mybatisplus.DataPermission; import com.youlai.system.common.annotation.DataPermission;
import com.youlai.system.pojo.bo.UserBO; import com.youlai.system.model.bo.UserBO;
import com.youlai.system.pojo.entity.SysUser; import com.youlai.system.model.entity.SysUser;
import com.youlai.system.pojo.bo.UserAuthInfo; import com.youlai.system.model.dto.UserAuthInfo;
import com.youlai.system.pojo.bo.UserFormBO; import com.youlai.system.model.bo.UserFormBO;
import com.youlai.system.pojo.query.UserPageQuery; import com.youlai.system.model.query.UserPageQuery;
import com.youlai.system.pojo.vo.UserExportVO; import com.youlai.system.model.vo.UserExportVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@@ -17,7 +17,7 @@ import java.util.List;
* 用户持久层 * 用户持久层
* *
* @author haoxr * @author haoxr
* @date 2022/1/14 * @since 2022/1/14
*/ */
@Mapper @Mapper
public interface SysUserMapper extends BaseMapper<SysUser> { public interface SysUserMapper extends BaseMapper<SysUser> {

View File

@@ -1,14 +1,14 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.system.pojo.entity.SysUserRole; import com.youlai.system.model.entity.SysUserRole;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
* 用户角色持久层 * 用户角色持久层
* *
* @author haoxr * @author haoxr
* @date 2022/1/15 * @since 2022/1/15
*/ */
@Mapper @Mapper
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> { public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.bo; package com.youlai.system.model.bo;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.bo; package com.youlai.system.model.bo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
@@ -9,7 +9,7 @@ import java.util.Date;
* 用户持久化对象 * 用户持久化对象
* *
* @author haoxr * @author haoxr
* @date 2022/6/10 * @since 2022/6/10
*/ */
@Data @Data
public class UserBO { public class UserBO {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.bo; package com.youlai.system.model.bo;
import lombok.Data; import lombok.Data;
@@ -8,7 +8,7 @@ import java.util.List;
* user表单持久化对象 * user表单持久化对象
* *
* @author haoxr * @author haoxr
* @date 2022/6/10 * @since 2022/6/10
*/ */
@Data @Data
public class UserFormBO { public class UserFormBO {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.dto; package com.youlai.system.model.dto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder; import lombok.Builder;
@@ -7,8 +7,8 @@ import lombok.Data;
/** /**
* 验证码响应对象 * 验证码响应对象
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
@Schema(description ="验证码响应对象") @Schema(description ="验证码响应对象")
@Builder @Builder

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.dto; package com.youlai.system.model.dto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder; import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.bo; package com.youlai.system.model.dto;
import lombok.Data; import lombok.Data;
@@ -8,7 +8,7 @@ import java.util.Set;
* 用户认证信息 * 用户认证信息
* *
* @author haoxr * @author haoxr
* @date 2022/10/22 * @since 2022/10/22
* *
*/ */
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;

View File

@@ -1,9 +1,9 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import lombok.Data; import lombok.Data;
@@ -12,7 +12,7 @@ import lombok.Data;
* 字典数据表 * 字典数据表
* *
* @author haoxr * @author haoxr
* @date 2022/12/17 * @since 2022/12/17
*/ */
@Data @Data
public class SysDict implements Serializable { public class SysDict implements Serializable {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -9,7 +9,7 @@ import lombok.Data;
* 字典类型实体 * 字典类型实体
* *
* @author haoxr * @author haoxr
* @date 2022/12/17 * @since 2022/12/17
*/ */
@Data @Data
public class SysDictType extends BaseEntity { public class SysDictType extends BaseEntity {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -12,7 +12,7 @@ import lombok.Data;
* 菜单实体对象 * 菜单实体对象
* *
* @author haoxr * @author haoxr
* @date 2023/3/6 * @since 2023/3/6
*/ */
@TableName(value ="sys_menu") @TableName(value ="sys_menu")
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.entity; package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -10,7 +10,7 @@ import lombok.NoArgsConstructor;
* 用户和角色关联表 * 用户和角色关联表
* *
* @author haoxr * @author haoxr
* @date 2022/12/17 * @since 2022/12/17
*/ */
@Data @Data
@AllArgsConstructor @AllArgsConstructor

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import com.youlai.system.common.enums.MenuTypeEnum; import com.youlai.system.common.enums.MenuTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.form; package com.youlai.system.model.form;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -12,7 +12,7 @@ import java.util.List;
* 用户表单对象 * 用户表单对象
* *
* @author haoxr * @author haoxr
* @date 2022/4/12 11:04 * @since 2022/4/12 11:04
*/ */
@Schema(description = "用户表单对象") @Schema(description = "用户表单对象")
@Data @Data

View File

@@ -1,6 +1,5 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -8,7 +7,7 @@ import lombok.Data;
* 部门查询对象 * 部门查询对象
* *
* @author haoxr * @author haoxr
* @date 2022/6/11 * @since 2022/6/11
*/ */
@Schema(description ="部门分页查询对象") @Schema(description ="部门分页查询对象")
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import com.youlai.system.common.base.BasePageQuery; import com.youlai.system.common.base.BasePageQuery;

View File

@@ -1,9 +1,8 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import com.youlai.system.common.base.BasePageQuery; import com.youlai.system.common.base.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@Schema(description ="字典类型分页查询对象") @Schema(description ="字典类型分页查询对象")

View File

@@ -1,6 +1,5 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@@ -1,15 +1,14 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import com.youlai.system.common.base.BasePageQuery; import com.youlai.system.common.base.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
/** /**
* 权限分页查询对象 * 权限分页查询对象
* *
* @author haoxr * @author haoxr
* @date 2022/1/14 22:22 * @since 2022/1/14 22:22
*/ */
@Data @Data
@Schema @Schema

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import com.youlai.system.common.base.BasePageQuery; import com.youlai.system.common.base.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@@ -8,7 +8,7 @@ import lombok.Data;
* 角色分页查询实体 * 角色分页查询实体
* *
* @author haoxr * @author haoxr
* @date 2022/6/3 * @since 2022/6/3
* *
*/ */
@Data @Data

View File

@@ -1,15 +1,14 @@
package com.youlai.system.pojo.query; package com.youlai.system.model.query;
import com.youlai.system.common.base.BasePageQuery; import com.youlai.system.common.base.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
/** /**
* 用户分页查询对象 * 用户分页查询对象
* *
* @author haoxr * @author haoxr
* @date 2022/1/14 * @since 2022/1/14
*/ */
@Schema @Schema
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,7 +1,6 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlai.system.common.enums.MenuTypeEnum; import com.youlai.system.common.enums.MenuTypeEnum;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@@ -10,7 +10,7 @@ import java.util.List;
* 菜单路由视图对象 * 菜单路由视图对象
* *
* @author haoxr * @author haoxr
* @date 2020/11/28 * @since 2020/11/28
*/ */
@Schema(description = "路由对象") @Schema(description = "路由对象")
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.DateTimeFormat;
@@ -11,7 +11,7 @@ import java.time.LocalDateTime;
* 用户导出视图对象 * 用户导出视图对象
* *
* @author haoxr * @author haoxr
* @date 2022/4/11 8:46 * @since 2022/4/11 8:46
*/ */
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data; import lombok.Data;
@@ -7,7 +7,7 @@ import lombok.Data;
* 用户导入对象 * 用户导入对象
* *
* @author haoxr * @author haoxr
* @date 2022/4/10 * @since 2022/4/10
*/ */
@Data @Data
public class UserImportVO { public class UserImportVO {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -9,7 +9,7 @@ import java.util.Set;
* 用户登录视图对象 * 用户登录视图对象
* *
* @author haoxr * @author haoxr
* @date 2022/1/14 * @since 2022/1/14
*/ */
@Schema(description ="当前登录用户视图对象") @Schema(description ="当前登录用户视图对象")
@Data @Data

View File

@@ -1,4 +1,4 @@
package com.youlai.system.pojo.vo; package com.youlai.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
@@ -10,7 +10,7 @@ import java.util.Date;
* 用户分页视图对象 * 用户分页视图对象
* *
* @author haoxr * @author haoxr
* @date 2022/1/15 9:41 * @since 2022/1/15 9:41
*/ */
@Schema(description ="用户分页对象") @Schema(description ="用户分页对象")
@Data @Data

View File

@@ -1,9 +1,9 @@
package com.youlai.system.framework.security; package com.youlai.system.security;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.framework.security.userdetails.SysUserDetails; import com.youlai.system.security.userdetails.SysUserDetails;
import io.jsonwebtoken.*; import io.jsonwebtoken.*;
import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.io.DecodingException; import io.jsonwebtoken.io.DecodingException;
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
* JWT token manager * JWT token manager
* *
* @author haoxr * @author haoxr
* @date 2022/10/22 * @since 2022/10/22
*/ */
@Component @Component
public class JwtTokenManager { public class JwtTokenManager {

View File

@@ -1,8 +1,8 @@
package com.youlai.system.framework.easycaptcha.producer; package com.youlai.system.security.captcha;
import com.wf.captcha.*; import com.wf.captcha.*;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;
import com.youlai.system.framework.easycaptcha.config.EasyCaptchaConfig; import com.youlai.system.config.CaptchaConfig;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -11,23 +11,23 @@ import java.awt.*;
/** /**
* 验证码生成器 * 验证码生成器
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class EasyCaptchaProducer { public class EasyCaptchaProducer {
private final EasyCaptchaConfig easyCaptchaConfig; private final CaptchaConfig captchaConfig;
public Captcha getCaptcha() { public Captcha getCaptcha() {
Captcha captcha; Captcha captcha;
int width = easyCaptchaConfig.getWidth(); int width = captchaConfig.getWidth();
int height = easyCaptchaConfig.getHeight(); int height = captchaConfig.getHeight();
int length = easyCaptchaConfig.getLength(); int length = captchaConfig.getLength();
String fontName = easyCaptchaConfig.getFontName(); String fontName = captchaConfig.getFontName();
switch (easyCaptchaConfig.getType()) { switch (captchaConfig.getType()) {
case ARITHMETIC: case ARITHMETIC:
captcha = new ArithmeticCaptcha(width, height); captcha = new ArithmeticCaptcha(width, height);
//固定设置为两位图片为算数运算表达式 //固定设置为两位图片为算数运算表达式
@@ -52,7 +52,7 @@ public class EasyCaptchaProducer {
default: default:
throw new RuntimeException("验证码配置信息错误!正确配置查看 CaptchaTypeEnum "); throw new RuntimeException("验证码配置信息错误!正确配置查看 CaptchaTypeEnum ");
} }
captcha.setFont(new Font(fontName, easyCaptchaConfig.getFontStyle(), easyCaptchaConfig.getFontSize())); captcha.setFont(new Font(fontName, captchaConfig.getFontStyle(), captchaConfig.getFontSize()));
return captcha; return captcha;
} }

View File

@@ -1,24 +1,23 @@
package com.youlai.system.framework.easycaptcha.service; package com.youlai.system.security.captcha;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.framework.easycaptcha.config.EasyCaptchaConfig; import com.youlai.system.config.CaptchaConfig;
import com.youlai.system.framework.easycaptcha.producer.EasyCaptchaProducer; import com.youlai.system.model.dto.CaptchaResult;
import com.youlai.system.pojo.dto.CaptchaResult;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* EasyCaptcha 业务类 * EasyCaptcha 业务类
* *
* @author: haoxr * @author haoxr
* @date: 2023/03/24 * @since 2023/03/24
*/ */
@Service @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class EasyCaptchaService { public class EasyCaptchaService {
@@ -26,7 +25,7 @@ public class EasyCaptchaService {
private final RedisTemplate redisTemplate; private final RedisTemplate redisTemplate;
private final EasyCaptchaConfig easyCaptchaConfig; private final CaptchaConfig captchaConfig;
/** /**
* 获取验证码 * 获取验证码
@@ -42,13 +41,12 @@ public class EasyCaptchaService {
// 验证码文本缓存至Redis用于登录校验 // 验证码文本缓存至Redis用于登录校验
String verifyCodeKey = IdUtil.fastSimpleUUID(); String verifyCodeKey = IdUtil.fastSimpleUUID();
redisTemplate.opsForValue().set(SecurityConstants.VERIFY_CODE_CACHE_PREFIX + verifyCodeKey, captchaText, redisTemplate.opsForValue().set(SecurityConstants.VERIFY_CODE_CACHE_PREFIX + verifyCodeKey, captchaText,
easyCaptchaConfig.getTtl(), TimeUnit.SECONDS); captchaConfig.getTtl(), TimeUnit.SECONDS);
CaptchaResult captchaResult = CaptchaResult.builder() return CaptchaResult.builder()
.verifyCodeKey(verifyCodeKey) .verifyCodeKey(verifyCodeKey)
.verifyCodeBase64(captchaBase64) .verifyCodeBase64(captchaBase64)
.build(); .build();
return captchaResult;
} }
} }

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.security.exception; package com.youlai.system.security.exception;
import com.youlai.system.common.result.ResultCode; import com.youlai.system.common.result.ResultCode;
import com.youlai.system.common.util.ResponseUtils; import com.youlai.system.common.util.ResponseUtils;
@@ -14,7 +14,7 @@ import java.io.IOException;
* Spring Security访问异常处理器 * Spring Security访问异常处理器
* *
* @author haoxr * @author haoxr
* @date 2022/10/18 * @since 2022/10/18
*/ */
@Component @Component
public class MyAccessDeniedHandler implements AccessDeniedHandler { public class MyAccessDeniedHandler implements AccessDeniedHandler {

View File

@@ -1,4 +1,4 @@
package com.youlai.system.framework.security.exception; package com.youlai.system.security.exception;
import com.youlai.system.common.result.ResultCode; import com.youlai.system.common.result.ResultCode;
import com.youlai.system.common.util.ResponseUtils; import com.youlai.system.common.util.ResponseUtils;
@@ -15,7 +15,7 @@ import java.io.IOException;
* 认证异常处理 * 认证异常处理
* *
* @author haoxr * @author haoxr
* @date 2022/10/18 * @since 2022/10/18
*/ */
@Component @Component
public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint { public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {

View File

@@ -1,24 +1,25 @@
package com.youlai.system.framework.security.service; package com.youlai.system.security.service;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.constant.SecurityConstants;
import com.youlai.system.framework.security.util.SecurityUtils; import com.youlai.system.common.util.SecurityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.PatternMatchUtils; import org.springframework.util.PatternMatchUtils;
import java.util.Set; import java.util.Set;
/** /**
* SpringSecurity权限校验 * SpringSecurity 权限校验
* *
* @author haoxr * @author haoxr
* @since 2022/2/22 * @since 2022/2/22
*/ */
@Service("ss") @Component("ss")
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class PermissionService { public class PermissionService {

Some files were not shown because too many files have changed in this diff Show More