refactor: 项目结构合理性优化
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package com.youlai.system.framework.resubmit;
|
||||
package com.youlai.system.aspect;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.youlai.system.common.exception.BusinessException;
|
||||
import com.youlai.system.common.result.ResultCode;
|
||||
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 lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -21,50 +22,48 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 防重复提交切面
|
||||
* 处理重复提交的切面
|
||||
*
|
||||
* @author : haoxr
|
||||
* @since : 2023/05/09
|
||||
* @author haoxr
|
||||
* @since 2023/05/09
|
||||
*/
|
||||
@Aspect
|
||||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class ResubmitAspect {
|
||||
public class DuplicateSubmitAspect {
|
||||
|
||||
private final RedissonClient redissonClient;
|
||||
|
||||
private final JwtTokenManager jwtTokenManager;
|
||||
|
||||
private static final String RESUBMIT_LOCK_PREFIX = "LOCK:RESUBMIT:";
|
||||
|
||||
/**
|
||||
* 防重复提交切点
|
||||
*/
|
||||
@Pointcut("@annotation(resubmit)")
|
||||
public void preventDuplicateSubmitPointCut(Resubmit resubmit) {
|
||||
@Pointcut("@annotation(preventDuplicateSubmit)")
|
||||
public void preventDuplicateSubmitPointCut(PreventDuplicateSubmit preventDuplicateSubmit) {
|
||||
log.info("定义防重复提交切点");
|
||||
}
|
||||
|
||||
@Around("preventDuplicateSubmitPointCut(resubmit)")
|
||||
public Object doAround(ProceedingJoinPoint pjp, Resubmit resubmit) throws Throwable {
|
||||
@Around("preventDuplicateSubmitPointCut(preventDuplicateSubmit)")
|
||||
public Object doAround(ProceedingJoinPoint pjp, PreventDuplicateSubmit preventDuplicateSubmit) throws Throwable {
|
||||
|
||||
String resubmitLockKey = generateResubmitLockKey();
|
||||
if (resubmitLockKey != null) {
|
||||
int expire = resubmit.expire(); // 防重提交锁过期时间
|
||||
int expire = preventDuplicateSubmit.expire(); // 防重提交锁过期时间
|
||||
RLock lock = redissonClient.getLock(resubmitLockKey);
|
||||
boolean lockResult = lock.tryLock(0, expire, TimeUnit.SECONDS); // 获取锁失败,直接返回 false
|
||||
if (!lockResult) {
|
||||
throw new BusinessException(ResultCode.REPEAT_SUBMIT_ERROR); // 抛出重复提交提示信息
|
||||
}
|
||||
}
|
||||
Object result = pjp.proceed();
|
||||
return result;
|
||||
return pjp.proceed();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取防重提交锁的 key
|
||||
* 获取重复提交锁的 key
|
||||
*/
|
||||
private String generateResubmitLockKey() {
|
||||
String resubmitLockKey = null;
|
||||
@@ -72,7 +71,7 @@ public class ResubmitAspect {
|
||||
String jwt = RequestUtils.resolveToken(request);
|
||||
if (StrUtil.isNotBlank(jwt)) {
|
||||
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;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.framework.mybatisplus;
|
||||
package com.youlai.system.common.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.lang.annotation.*;
|
||||
* https://gitee.com/baomidou/mybatis-plus/issues/I37I90
|
||||
*
|
||||
* @author <a href="mailto:2256222053@qq.com">zc</a>
|
||||
* @date 2021-12-10
|
||||
* @since 2021-12-10
|
||||
*/
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@@ -1,19 +1,19 @@
|
||||
package com.youlai.system.framework.resubmit;
|
||||
package com.youlai.system.common.annotation;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 防重提交注解
|
||||
* 防止重复提交注解
|
||||
*
|
||||
* @author haoxr
|
||||
* @since 2023/5/9
|
||||
* @since 2.3.0
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
public @interface Resubmit {
|
||||
public @interface PreventDuplicateSubmit {
|
||||
|
||||
/**
|
||||
* 防重提交锁过期时间(秒)
|
||||
@@ -8,7 +8,7 @@ import lombok.Data;
|
||||
* 基础分页请求对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2021/2/28
|
||||
* @since 2021/2/28
|
||||
*/
|
||||
@Data
|
||||
@Schema
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.io.Serializable;
|
||||
* 视图对象基类
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/22
|
||||
* @since 2022/10/22
|
||||
*/
|
||||
@Data
|
||||
@ToString
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.util.Objects;
|
||||
* 枚举通用接口
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/3/27 12:06
|
||||
* @since 2022/3/27 12:06
|
||||
*/
|
||||
public interface IBaseEnum<T> {
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.youlai.system.common.constant;
|
||||
/**
|
||||
* Excel 常量
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
public interface ExcelConstants {
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.youlai.system.common.constant;
|
||||
/**
|
||||
* Security 常量
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
public interface SecurityConstants {
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.youlai.system.framework.easycaptcha.enums;
|
||||
package com.youlai.system.common.enums;
|
||||
|
||||
/**
|
||||
* EasyCaptcha 验证码类型枚举
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
public enum CaptchaTypeEnum {
|
||||
|
||||
@@ -7,7 +7,7 @@ import lombok.Getter;
|
||||
* 数据权限枚举
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/14
|
||||
* @since 2022/10/14
|
||||
*/
|
||||
public enum DataScopeEnum implements IBaseEnum<Integer> {
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.Getter;
|
||||
* 性别枚举
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/14
|
||||
* @since 2022/10/14
|
||||
*/
|
||||
@Schema(enumAsRef = true)
|
||||
public enum GenderEnum implements IBaseEnum<Integer> {
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.Getter;
|
||||
* 菜单类型枚举
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/4/23 9:36
|
||||
* @since 2022/4/23 9:36
|
||||
*/
|
||||
|
||||
public enum MenuTypeEnum implements IBaseEnum<Integer> {
|
||||
|
||||
@@ -7,7 +7,7 @@ import lombok.Getter;
|
||||
* 状态枚举
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/14
|
||||
* @since 2022/10/14
|
||||
*/
|
||||
public enum StatusEnum implements IBaseEnum<Integer> {
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import lombok.Getter;
|
||||
* 自定义业务异常
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/7/31
|
||||
* @since 2022/7/31
|
||||
*/
|
||||
@Getter
|
||||
public class BusinessException extends RuntimeException {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.common.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
* 下拉选项对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/22
|
||||
* @since 2022/1/22
|
||||
*/
|
||||
@Schema(description ="下拉选项对象")
|
||||
@Data
|
||||
@@ -10,7 +10,7 @@ import java.util.List;
|
||||
* 分页响应结构体
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/2/18 23:29
|
||||
* @since 2022/2/18 23:29
|
||||
*/
|
||||
@Data
|
||||
public class PageResult<T> implements Serializable {
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.io.Serializable;
|
||||
* 统一响应结构体
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/30
|
||||
* @since 2022/1/30
|
||||
**/
|
||||
@Data
|
||||
public class Result<T> implements Serializable {
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.io.Serializable;
|
||||
* 响应码枚举
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2020-06-23
|
||||
* @since 2020-06-23
|
||||
**/
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
package com.youlai.system.common.util;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.youlai.system.framework.easyexcel.MyAnalysisEventListener;
|
||||
import com.youlai.system.listener.easyexcel.MyAnalysisEventListener;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Excel 工具类
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/01
|
||||
* @author haoxr
|
||||
* @since 2023/03/01
|
||||
*/
|
||||
public class ExcelUtils {
|
||||
|
||||
public static <T> String importExcel(InputStream is, Class clazz, MyAnalysisEventListener<T> listener) {
|
||||
EasyExcel.read(is, clazz, listener).sheet().doRead();
|
||||
String msg = listener.getMsg();
|
||||
return msg;
|
||||
return listener.getMsg();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.io.IOException;
|
||||
* 响应工具类
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/18
|
||||
* @since 2022/10/18
|
||||
*/
|
||||
public class ResponseUtils {
|
||||
|
||||
|
||||
@@ -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.convert.Convert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.GrantedAuthority;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
@@ -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 org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -10,13 +10,13 @@ import java.awt.*;
|
||||
/**
|
||||
* EasyCaptcha 配置类
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "easy-captcha")
|
||||
@Configuration
|
||||
@Data
|
||||
public class EasyCaptchaConfig {
|
||||
public class CaptchaConfig {
|
||||
|
||||
/**
|
||||
* 验证码类型
|
||||
@@ -10,10 +10,10 @@ import org.springframework.web.filter.CorsFilter;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* CORS资源共享配置
|
||||
* CORS 资源共享配置
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2023/4/17
|
||||
* @since 2023/4/17
|
||||
*/
|
||||
@Configuration
|
||||
public class CorsConfig {
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.config.GlobalConfig;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.youlai.system.framework.mybatisplus.MyDataPermissionHandler;
|
||||
import com.youlai.system.framework.mybatisplus.MyMetaObjectHandler;
|
||||
import com.youlai.system.handler.mybatisplus.MyDataPermissionHandler;
|
||||
import com.youlai.system.handler.mybatisplus.MyMetaObjectHandler;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -23,7 +23,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
public class MybatisPlusConfig {
|
||||
|
||||
|
||||
@Value("${system-config.data-permission.enabled}")
|
||||
@Value("${system.config.data-permission-enabled}")
|
||||
private Boolean dataPermissionEnabled;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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.framework.security.filter.JwtAuthenticationFilter;
|
||||
import com.youlai.system.framework.security.exception.MyAccessDeniedHandler;
|
||||
import com.youlai.system.framework.security.exception.MyAuthenticationEntryPoint;
|
||||
import com.youlai.system.framework.security.JwtTokenManager;
|
||||
import com.youlai.system.framework.security.filter.VerifyCodeFilter;
|
||||
import com.youlai.system.filter.JwtAuthenticationFilter;
|
||||
import com.youlai.system.security.exception.MyAccessDeniedHandler;
|
||||
import com.youlai.system.security.exception.MyAuthenticationEntryPoint;
|
||||
import com.youlai.system.security.JwtTokenManager;
|
||||
import com.youlai.system.filter.VerifyCodeFilter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
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.configuration.EnableWebSecurity;
|
||||
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.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
@@ -25,31 +26,33 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
|
||||
* Spring Security 权限配置
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2023/2/17
|
||||
* @since 2023/2/17
|
||||
*/
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
@EnableGlobalMethodSecurity(prePostEnabled = true)
|
||||
@EnableMethodSecurity
|
||||
@RequiredArgsConstructor
|
||||
public class SecurityConfig {
|
||||
|
||||
private final MyAuthenticationEntryPoint myAuthenticationEntryPoint;
|
||||
private final MyAccessDeniedHandler myAccessDeniedHandler;
|
||||
private final MyAuthenticationEntryPoint authenticationEntryPoint;
|
||||
private final MyAccessDeniedHandler accessDeniedHandler;
|
||||
private final JwtTokenManager jwtTokenManager;
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||
http
|
||||
.csrf().disable()
|
||||
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
||||
.and()
|
||||
.authorizeHttpRequests()
|
||||
.requestMatchers(SecurityConstants.LOGIN_PATH).permitAll() // 登录接口放行但会走过滤器链-验证码校验
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.exceptionHandling()
|
||||
.authenticationEntryPoint(myAuthenticationEntryPoint)
|
||||
.accessDeniedHandler(myAccessDeniedHandler)
|
||||
.authorizeHttpRequests(requestMatcherRegistry ->
|
||||
requestMatcherRegistry.requestMatchers(SecurityConstants.LOGIN_PATH).permitAll()
|
||||
.anyRequest().authenticated()
|
||||
)
|
||||
.sessionManagement(configurer -> configurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
|
||||
.exceptionHandling(httpSecurityExceptionHandlingConfigurer ->
|
||||
httpSecurityExceptionHandlingConfigurer
|
||||
.authenticationEntryPoint(authenticationEntryPoint)
|
||||
.accessDeniedHandler(accessDeniedHandler)
|
||||
)
|
||||
.csrf(AbstractHttpConfigurer::disable)
|
||||
|
||||
;
|
||||
|
||||
// 验证码校验过滤器
|
||||
@@ -63,7 +66,6 @@ public class SecurityConfig {
|
||||
/**
|
||||
* 不走过滤器链的放行配置
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
public WebSecurityCustomizer webSecurityCustomizer() {
|
||||
@@ -74,7 +76,8 @@ public class SecurityConfig {
|
||||
"/doc.html",
|
||||
"/swagger-resources/**",
|
||||
"/v3/api-docs/**",
|
||||
"/swagger-ui/**"
|
||||
"/swagger-ui/**",
|
||||
"/ws/**"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import java.util.TreeMap;
|
||||
* Spring Doc FAQ: https://springdoc.org/#faq
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2023/2/17
|
||||
* @since 2023/2/17
|
||||
*/
|
||||
@Configuration
|
||||
public class SwaggerConfig {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.framework.xxljob;
|
||||
package com.youlai.system.config;
|
||||
|
||||
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -13,7 +13,8 @@ import org.springframework.context.annotation.Configuration;
|
||||
* @author xuxueli 2017-04-28
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnProperty(name = "xxl.job.enabled")// xxl.job.enabled = true 才会自动配置
|
||||
// system.config.xxl-job-enabled = true 才会自动装配
|
||||
@ConditionalOnProperty(name = "system.config.xxl-job-enabled")
|
||||
@Slf4j
|
||||
public class XxlJobConfig {
|
||||
|
||||
@@ -4,10 +4,10 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.youlai.system.common.constant.SecurityConstants;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.common.util.RequestUtils;
|
||||
import com.youlai.system.framework.easycaptcha.service.EasyCaptchaService;
|
||||
import com.youlai.system.pojo.dto.CaptchaResult;
|
||||
import com.youlai.system.pojo.dto.LoginResult;
|
||||
import com.youlai.system.framework.security.JwtTokenManager;
|
||||
import com.youlai.system.security.captcha.EasyCaptchaService;
|
||||
import com.youlai.system.model.dto.CaptchaResult;
|
||||
import com.youlai.system.model.dto.LoginResult;
|
||||
import com.youlai.system.security.JwtTokenManager;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.youlai.system.controller;
|
||||
|
||||
import com.youlai.system.framework.resubmit.Resubmit;
|
||||
import com.youlai.system.pojo.vo.Option;
|
||||
import com.youlai.system.common.annotation.PreventDuplicateSubmit;
|
||||
import com.youlai.system.common.model.Option;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.pojo.form.DeptForm;
|
||||
import com.youlai.system.pojo.query.DeptQuery;
|
||||
import com.youlai.system.pojo.vo.DeptVO;
|
||||
import com.youlai.system.model.form.DeptForm;
|
||||
import com.youlai.system.model.query.DeptQuery;
|
||||
import com.youlai.system.model.vo.DeptVO;
|
||||
import com.youlai.system.service.SysDeptService;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -59,7 +59,7 @@ public class SysDeptController {
|
||||
@Operation(summary = "新增部门", security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping
|
||||
@PreAuthorize("@ss.hasPerm('sys:dept:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
public Result saveDept(
|
||||
@Valid @RequestBody DeptForm formData
|
||||
) {
|
||||
|
||||
@@ -3,14 +3,14 @@ package com.youlai.system.controller;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.common.result.PageResult;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.framework.resubmit.Resubmit;
|
||||
import com.youlai.system.pojo.form.DictForm;
|
||||
import com.youlai.system.pojo.form.DictTypeForm;
|
||||
import com.youlai.system.pojo.query.DictPageQuery;
|
||||
import com.youlai.system.pojo.query.DictTypePageQuery;
|
||||
import com.youlai.system.pojo.vo.DictPageVO;
|
||||
import com.youlai.system.pojo.vo.DictTypePageVO;
|
||||
import com.youlai.system.pojo.vo.Option;
|
||||
import com.youlai.system.common.annotation.PreventDuplicateSubmit;
|
||||
import com.youlai.system.model.form.DictForm;
|
||||
import com.youlai.system.model.form.DictTypeForm;
|
||||
import com.youlai.system.model.query.DictPageQuery;
|
||||
import com.youlai.system.model.query.DictTypePageQuery;
|
||||
import com.youlai.system.model.vo.DictPageVO;
|
||||
import com.youlai.system.model.vo.DictTypePageVO;
|
||||
import com.youlai.system.common.model.Option;
|
||||
import com.youlai.system.service.SysDictService;
|
||||
import com.youlai.system.service.SysDictTypeService;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -55,7 +55,7 @@ public class SysDictController {
|
||||
@Operation(summary = "新增字典", security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping
|
||||
@PreAuthorize("@ss.hasPerm('sys:dict:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
public Result saveDict(
|
||||
@RequestBody DictForm DictForm
|
||||
) {
|
||||
@@ -117,7 +117,7 @@ public class SysDictController {
|
||||
@Operation(summary = "新增字典类型", security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping("/types")
|
||||
@PreAuthorize("@ss.hasPerm('sys:dict_type:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
public Result saveDictType(@RequestBody DictTypeForm dictTypeForm) {
|
||||
boolean result = dictTypeService.saveDictType(dictTypeForm);
|
||||
return Result.judge(result);
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.youlai.system.controller;
|
||||
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.framework.resubmit.Resubmit;
|
||||
import com.youlai.system.pojo.form.MenuForm;
|
||||
import com.youlai.system.pojo.query.MenuQuery;
|
||||
import com.youlai.system.pojo.vo.MenuVO;
|
||||
import com.youlai.system.pojo.vo.Option;
|
||||
import com.youlai.system.pojo.vo.RouteVO;
|
||||
import com.youlai.system.common.annotation.PreventDuplicateSubmit;
|
||||
import com.youlai.system.model.form.MenuForm;
|
||||
import com.youlai.system.model.query.MenuQuery;
|
||||
import com.youlai.system.model.vo.MenuVO;
|
||||
import com.youlai.system.common.model.Option;
|
||||
import com.youlai.system.model.vo.RouteVO;
|
||||
import com.youlai.system.service.SysMenuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -25,7 +25,7 @@ import java.util.List;
|
||||
* 菜单控制器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2020/11/06
|
||||
* @since 2020/11/06
|
||||
*/
|
||||
@Tag(name = "04.菜单接口")
|
||||
@RestController
|
||||
@@ -69,7 +69,7 @@ public class SysMenuController {
|
||||
@Operation(summary = "新增菜单",security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping
|
||||
@PreAuthorize("@ss.hasPerm('sys:menu:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
@CacheEvict(cacheNames = "system", key = "'routes'")
|
||||
public Result addMenu(@RequestBody MenuForm menuForm) {
|
||||
boolean result = menuService.saveMenu(menuForm);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.youlai.system.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.framework.resubmit.Resubmit;
|
||||
import com.youlai.system.pojo.vo.Option;
|
||||
import com.youlai.system.common.annotation.PreventDuplicateSubmit;
|
||||
import com.youlai.system.common.model.Option;
|
||||
import com.youlai.system.common.result.PageResult;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.pojo.form.RoleForm;
|
||||
import com.youlai.system.pojo.query.RolePageQuery;
|
||||
import com.youlai.system.pojo.vo.RolePageVO;
|
||||
import com.youlai.system.model.form.RoleForm;
|
||||
import com.youlai.system.model.query.RolePageQuery;
|
||||
import com.youlai.system.model.vo.RolePageVO;
|
||||
import com.youlai.system.service.SysRoleService;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -48,7 +48,7 @@ public class SysRoleController {
|
||||
@Operation(summary = "新增角色",security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping
|
||||
@PreAuthorize("@ss.hasPerm('sys:role:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
public Result addRole(@Valid @RequestBody RoleForm roleForm) {
|
||||
boolean result = roleService.saveRole(roleForm);
|
||||
return Result.judge(result);
|
||||
|
||||
@@ -8,15 +8,15 @@ import com.youlai.system.common.constant.ExcelConstants;
|
||||
import com.youlai.system.common.result.PageResult;
|
||||
import com.youlai.system.common.result.Result;
|
||||
import com.youlai.system.common.util.ExcelUtils;
|
||||
import com.youlai.system.framework.resubmit.Resubmit;
|
||||
import com.youlai.system.listener.UserImportListener;
|
||||
import com.youlai.system.pojo.vo.UserImportVO;
|
||||
import com.youlai.system.pojo.form.UserForm;
|
||||
import com.youlai.system.pojo.entity.SysUser;
|
||||
import com.youlai.system.pojo.query.UserPageQuery;
|
||||
import com.youlai.system.pojo.vo.UserExportVO;
|
||||
import com.youlai.system.pojo.vo.UserInfoVO;
|
||||
import com.youlai.system.pojo.vo.UserPageVO;
|
||||
import com.youlai.system.common.annotation.PreventDuplicateSubmit;
|
||||
import com.youlai.system.listener.easyexcel.UserImportListener;
|
||||
import com.youlai.system.model.vo.UserImportVO;
|
||||
import com.youlai.system.model.form.UserForm;
|
||||
import com.youlai.system.model.entity.SysUser;
|
||||
import com.youlai.system.model.query.UserPageQuery;
|
||||
import com.youlai.system.model.vo.UserExportVO;
|
||||
import com.youlai.system.model.vo.UserInfoVO;
|
||||
import com.youlai.system.model.vo.UserPageVO;
|
||||
import com.youlai.system.service.SysUserService;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -43,7 +43,7 @@ import java.util.List;
|
||||
* 用户控制器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/16
|
||||
* @since 2022/10/16
|
||||
*/
|
||||
@Tag(name = "02.用户接口")
|
||||
@RestController
|
||||
@@ -65,7 +65,7 @@ public class SysUserController {
|
||||
@Operation(summary = "新增用户", security = {@SecurityRequirement(name = "Authorization")})
|
||||
@PostMapping
|
||||
@PreAuthorize("@ss.hasPerm('sys:user:add')")
|
||||
@Resubmit
|
||||
@PreventDuplicateSubmit
|
||||
public Result saveUser(
|
||||
@RequestBody @Valid UserForm userForm
|
||||
) {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.youlai.system.pojo.entity.SysDept;
|
||||
import com.youlai.system.pojo.form.DeptForm;
|
||||
import com.youlai.system.pojo.vo.DeptVO;
|
||||
import com.youlai.system.model.entity.SysDept;
|
||||
import com.youlai.system.model.form.DeptForm;
|
||||
import com.youlai.system.model.vo.DeptVO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 部门对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/7/29
|
||||
* @since 2022/7/29
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface DeptConverter {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.pojo.entity.SysDict;
|
||||
import com.youlai.system.pojo.form.DictForm;
|
||||
import com.youlai.system.pojo.vo.DictPageVO;
|
||||
import com.youlai.system.model.entity.SysDict;
|
||||
import com.youlai.system.model.form.DictForm;
|
||||
import com.youlai.system.model.vo.DictPageVO;
|
||||
import org.mapstruct.InheritInverseConfiguration;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.mapstruct.Mapper;
|
||||
* 字典数据项对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/8
|
||||
* @since 2022/6/8
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface DictConverter {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.pojo.entity.SysDictType;
|
||||
import com.youlai.system.pojo.form.DictTypeForm;
|
||||
import com.youlai.system.pojo.vo.DictTypePageVO;
|
||||
import com.youlai.system.model.entity.SysDictType;
|
||||
import com.youlai.system.model.form.DictTypeForm;
|
||||
import com.youlai.system.model.vo.DictTypePageVO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 字典类型对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/8
|
||||
* @since 2022/6/8
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface DictTypeConverter {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.youlai.system.pojo.entity.SysMenu;
|
||||
import com.youlai.system.pojo.form.MenuForm;
|
||||
import com.youlai.system.pojo.vo.MenuVO;
|
||||
import com.youlai.system.model.entity.SysMenu;
|
||||
import com.youlai.system.model.form.MenuForm;
|
||||
import com.youlai.system.model.vo.MenuVO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 菜单对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/7/29
|
||||
* @since 2022/7/29
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface MenuConverter {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.pojo.vo.Option;
|
||||
import com.youlai.system.pojo.entity.SysRole;
|
||||
import com.youlai.system.pojo.form.RoleForm;
|
||||
import com.youlai.system.pojo.vo.RolePageVO;
|
||||
import com.youlai.system.common.model.Option;
|
||||
import com.youlai.system.model.entity.SysRole;
|
||||
import com.youlai.system.model.form.RoleForm;
|
||||
import com.youlai.system.model.vo.RolePageVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.Mappings;
|
||||
@@ -15,7 +15,7 @@ import java.util.List;
|
||||
* 角色对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/5/29
|
||||
* @since 2022/5/29
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface RoleConverter {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.youlai.system.converter;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.pojo.bo.UserBO;
|
||||
import com.youlai.system.pojo.entity.SysUser;
|
||||
import com.youlai.system.pojo.form.UserForm;
|
||||
import com.youlai.system.pojo.bo.UserFormBO;
|
||||
import com.youlai.system.pojo.vo.UserImportVO;
|
||||
import com.youlai.system.pojo.vo.UserInfoVO;
|
||||
import com.youlai.system.pojo.vo.UserPageVO;
|
||||
import com.youlai.system.model.bo.UserBO;
|
||||
import com.youlai.system.model.entity.SysUser;
|
||||
import com.youlai.system.model.form.UserForm;
|
||||
import com.youlai.system.model.bo.UserFormBO;
|
||||
import com.youlai.system.model.vo.UserImportVO;
|
||||
import com.youlai.system.model.vo.UserInfoVO;
|
||||
import com.youlai.system.model.vo.UserPageVO;
|
||||
import org.mapstruct.InheritInverseConfiguration;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
@@ -17,7 +17,7 @@ import org.mapstruct.Mappings;
|
||||
* 用户对象转换器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/8
|
||||
* @since 2022/6/8
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserConverter {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.youlai.system.framework.security.filter;
|
||||
package com.youlai.system.filter;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.youlai.system.common.constant.SecurityConstants;
|
||||
import com.youlai.system.common.result.ResultCode;
|
||||
import com.youlai.system.common.util.RequestUtils;
|
||||
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 jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
@@ -22,7 +22,7 @@ import java.io.IOException;
|
||||
* JWT 校验过滤器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/1
|
||||
* @since 2022/10/1
|
||||
*/
|
||||
public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
|
||||
@@ -8,8 +8,8 @@ import org.springframework.web.filter.CommonsRequestLoggingFilter;
|
||||
/**
|
||||
* 请求日志打印过滤器
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/03
|
||||
* @author haoxr
|
||||
* @since 2023/03/03
|
||||
*/
|
||||
@Configuration
|
||||
@Slf4j
|
||||
|
||||
@@ -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.util.StrUtil;
|
||||
@@ -21,7 +21,7 @@ import java.io.IOException;
|
||||
* 验证码校验过滤器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/1
|
||||
* @since 2022/10/1
|
||||
*/
|
||||
public class VerifyCodeFilter extends OncePerRequestFilter {
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.youlai.system.framework.mybatisplus;
|
||||
package com.youlai.system.handler.mybatisplus;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
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.enums.DataScopeEnum;
|
||||
import com.youlai.system.framework.security.util.SecurityUtils;
|
||||
import com.youlai.system.common.util.SecurityUtils;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sf.jsqlparser.expression.Expression;
|
||||
@@ -19,7 +20,7 @@ import java.lang.reflect.Method;
|
||||
* 数据权限控制器
|
||||
*
|
||||
* @author zc
|
||||
* @date 2021-12-10 13:28
|
||||
* @since 2021-12-10 13:28
|
||||
*/
|
||||
@Slf4j
|
||||
public class MyDataPermissionHandler implements DataPermissionHandler {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.framework.mybatisplus;
|
||||
package com.youlai.system.handler.mybatisplus;
|
||||
|
||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
|
||||
* mybatis-plus 字段自动填充
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/14
|
||||
* @since 2022/10/14
|
||||
* @link https://mp.baomidou.com/guide/auto-fill-metainfo.html
|
||||
*/
|
||||
@Component
|
||||
@@ -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.handler.annotation.XxlJob;
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.youlai.system.framework.easyexcel;
|
||||
package com.youlai.system.listener.easyexcel;
|
||||
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
|
||||
/**
|
||||
* 自定义解析结果监听器
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/01
|
||||
* @author haoxr
|
||||
* @since 2023/03/01
|
||||
*/
|
||||
public abstract class MyAnalysisEventListener<T> extends AnalysisEventListener<T> {
|
||||
|
||||
@@ -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.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.StatusEnum;
|
||||
import com.youlai.system.converter.UserConverter;
|
||||
import com.youlai.system.framework.easyexcel.MyAnalysisEventListener;
|
||||
import com.youlai.system.pojo.entity.SysRole;
|
||||
import com.youlai.system.pojo.entity.SysUser;
|
||||
import com.youlai.system.pojo.entity.SysUserRole;
|
||||
import com.youlai.system.pojo.vo.UserImportVO;
|
||||
import com.youlai.system.model.entity.SysRole;
|
||||
import com.youlai.system.model.entity.SysUser;
|
||||
import com.youlai.system.model.entity.SysUserRole;
|
||||
import com.youlai.system.model.vo.UserImportVO;
|
||||
import com.youlai.system.service.SysRoleService;
|
||||
import com.youlai.system.service.SysUserRoleService;
|
||||
import com.youlai.system.service.SysUserService;
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.youlai.system.listener.rabbitmq;
|
||||
|
||||
/**
|
||||
* @author haoxr
|
||||
* @since 0.0.1
|
||||
*/
|
||||
public class TestListener {
|
||||
}
|
||||
@@ -3,8 +3,8 @@ package com.youlai.system.mapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.youlai.system.framework.mybatisplus.DataPermission;
|
||||
import com.youlai.system.pojo.entity.SysDept;
|
||||
import com.youlai.system.common.annotation.DataPermission;
|
||||
import com.youlai.system.model.entity.SysDept;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.youlai.system.mapper;
|
||||
|
||||
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;
|
||||
|
||||
@Mapper
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.youlai.system.mapper;
|
||||
|
||||
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;
|
||||
|
||||
@Mapper
|
||||
|
||||
@@ -4,12 +4,12 @@ package com.youlai.system.mapper;
|
||||
* 菜单持久接口层
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/24
|
||||
* @since 2022/1/24
|
||||
*/
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.youlai.system.pojo.entity.SysMenu;
|
||||
import com.youlai.system.pojo.bo.RouteBO;
|
||||
import com.youlai.system.model.entity.SysMenu;
|
||||
import com.youlai.system.model.bo.RouteBO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.youlai.system.mapper;
|
||||
|
||||
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 java.util.Set;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.youlai.system.mapper;
|
||||
|
||||
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 java.util.List;
|
||||
@@ -10,7 +10,7 @@ import java.util.List;
|
||||
* 角色菜单持久层
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/4
|
||||
* @since 2022/6/4
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
|
||||
|
||||
@@ -2,13 +2,13 @@ package com.youlai.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.youlai.system.framework.mybatisplus.DataPermission;
|
||||
import com.youlai.system.pojo.bo.UserBO;
|
||||
import com.youlai.system.pojo.entity.SysUser;
|
||||
import com.youlai.system.pojo.bo.UserAuthInfo;
|
||||
import com.youlai.system.pojo.bo.UserFormBO;
|
||||
import com.youlai.system.pojo.query.UserPageQuery;
|
||||
import com.youlai.system.pojo.vo.UserExportVO;
|
||||
import com.youlai.system.common.annotation.DataPermission;
|
||||
import com.youlai.system.model.bo.UserBO;
|
||||
import com.youlai.system.model.entity.SysUser;
|
||||
import com.youlai.system.model.dto.UserAuthInfo;
|
||||
import com.youlai.system.model.bo.UserFormBO;
|
||||
import com.youlai.system.model.query.UserPageQuery;
|
||||
import com.youlai.system.model.vo.UserExportVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
@@ -17,7 +17,7 @@ import java.util.List;
|
||||
* 用户持久层
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/14
|
||||
* @since 2022/1/14
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.youlai.system.mapper;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* 用户角色持久层
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/15
|
||||
* @since 2022/1/15
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
|
||||
|
||||
@@ -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.TableId;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.bo;
|
||||
package com.youlai.system.model.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -9,7 +9,7 @@ import java.util.Date;
|
||||
* 用户持久化对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/10
|
||||
* @since 2022/6/10
|
||||
*/
|
||||
@Data
|
||||
public class UserBO {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.bo;
|
||||
package com.youlai.system.model.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.List;
|
||||
* user表单持久化对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/10
|
||||
* @since 2022/6/10
|
||||
*/
|
||||
@Data
|
||||
public class UserFormBO {
|
||||
@@ -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 lombok.Builder;
|
||||
@@ -7,8 +7,8 @@ import lombok.Data;
|
||||
/**
|
||||
* 验证码响应对象
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
@Schema(description ="验证码响应对象")
|
||||
@Builder
|
||||
@@ -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 lombok.Builder;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.bo;
|
||||
package com.youlai.system.model.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.Set;
|
||||
* 用户认证信息
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/22
|
||||
* @since 2022/10/22
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@@ -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.TableId;
|
||||
@@ -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.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -12,7 +12,7 @@ import lombok.Data;
|
||||
* 字典数据表
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/12/17
|
||||
* @since 2022/12/17
|
||||
*/
|
||||
@Data
|
||||
public class SysDict implements Serializable {
|
||||
@@ -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.TableId;
|
||||
@@ -9,7 +9,7 @@ import lombok.Data;
|
||||
* 字典类型实体
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/12/17
|
||||
* @since 2022/12/17
|
||||
*/
|
||||
@Data
|
||||
public class SysDictType extends BaseEntity {
|
||||
@@ -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.TableId;
|
||||
@@ -12,7 +12,7 @@ import lombok.Data;
|
||||
* 菜单实体对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2023/3/6
|
||||
* @since 2023/3/6
|
||||
*/
|
||||
@TableName(value ="sys_menu")
|
||||
@Data
|
||||
@@ -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.TableId;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.entity;
|
||||
package com.youlai.system.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -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.TableId;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.entity;
|
||||
package com.youlai.system.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -10,7 +10,7 @@ import lombok.NoArgsConstructor;
|
||||
* 用户和角色关联表
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/12/17
|
||||
* @since 2022/12/17
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@@ -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 jakarta.validation.constraints.NotNull;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.form;
|
||||
package com.youlai.system.model.form;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.form;
|
||||
package com.youlai.system.model.form;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.form;
|
||||
package com.youlai.system.model.form;
|
||||
|
||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -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 lombok.Data;
|
||||
@@ -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 lombok.Data;
|
||||
@@ -12,7 +12,7 @@ import java.util.List;
|
||||
* 用户表单对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/4/12 11:04
|
||||
* @since 2022/4/12 11:04
|
||||
*/
|
||||
@Schema(description = "用户表单对象")
|
||||
@Data
|
||||
@@ -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 lombok.Data;
|
||||
|
||||
@@ -8,7 +7,7 @@ import lombok.Data;
|
||||
* 部门查询对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/11
|
||||
* @since 2022/6/11
|
||||
*/
|
||||
@Schema(description ="部门分页查询对象")
|
||||
@Data
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.query;
|
||||
package com.youlai.system.model.query;
|
||||
|
||||
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
@@ -1,9 +1,8 @@
|
||||
package com.youlai.system.pojo.query;
|
||||
package com.youlai.system.model.query;
|
||||
|
||||
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description ="字典类型分页查询对象")
|
||||
@@ -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 lombok.Data;
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package com.youlai.system.pojo.query;
|
||||
package com.youlai.system.model.query;
|
||||
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 权限分页查询对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/14 22:22
|
||||
* @since 2022/1/14 22:22
|
||||
*/
|
||||
@Data
|
||||
@Schema
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.query;
|
||||
package com.youlai.system.model.query;
|
||||
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -8,7 +8,7 @@ import lombok.Data;
|
||||
* 角色分页查询实体
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/6/3
|
||||
* @since 2022/6/3
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@@ -1,15 +1,14 @@
|
||||
package com.youlai.system.pojo.query;
|
||||
package com.youlai.system.model.query;
|
||||
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户分页查询对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/14
|
||||
* @since 2022/1/14
|
||||
*/
|
||||
@Schema
|
||||
@Data
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -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 lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -10,7 +10,7 @@ import java.util.List;
|
||||
* 菜单路由视图对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2020/11/28
|
||||
* @since 2020/11/28
|
||||
*/
|
||||
@Schema(description = "路由对象")
|
||||
@Data
|
||||
@@ -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.format.DateTimeFormat;
|
||||
@@ -11,7 +11,7 @@ import java.time.LocalDateTime;
|
||||
* 用户导出视图对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/4/11 8:46
|
||||
* @since 2022/4/11 8:46
|
||||
*/
|
||||
|
||||
@Data
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
@@ -7,7 +7,7 @@ import lombok.Data;
|
||||
* 用户导入对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/4/10
|
||||
* @since 2022/4/10
|
||||
*/
|
||||
@Data
|
||||
public class UserImportVO {
|
||||
@@ -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 lombok.Data;
|
||||
@@ -9,7 +9,7 @@ import java.util.Set;
|
||||
* 用户登录视图对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/14
|
||||
* @since 2022/1/14
|
||||
*/
|
||||
@Schema(description ="当前登录用户视图对象")
|
||||
@Data
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.youlai.system.pojo.vo;
|
||||
package com.youlai.system.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -10,7 +10,7 @@ import java.util.Date;
|
||||
* 用户分页视图对象
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/1/15 9:41
|
||||
* @since 2022/1/15 9:41
|
||||
*/
|
||||
@Schema(description ="用户分页对象")
|
||||
@Data
|
||||
@@ -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.util.IdUtil;
|
||||
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.io.Decoders;
|
||||
import io.jsonwebtoken.io.DecodingException;
|
||||
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
|
||||
* JWT token manager
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/22
|
||||
* @since 2022/10/22
|
||||
*/
|
||||
@Component
|
||||
public class JwtTokenManager {
|
||||
@@ -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.base.Captcha;
|
||||
import com.youlai.system.framework.easycaptcha.config.EasyCaptchaConfig;
|
||||
import com.youlai.system.config.CaptchaConfig;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -11,23 +11,23 @@ import java.awt.*;
|
||||
/**
|
||||
* 验证码生成器
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class EasyCaptchaProducer {
|
||||
private final EasyCaptchaConfig easyCaptchaConfig;
|
||||
private final CaptchaConfig captchaConfig;
|
||||
|
||||
public Captcha getCaptcha() {
|
||||
Captcha captcha;
|
||||
int width = easyCaptchaConfig.getWidth();
|
||||
int height = easyCaptchaConfig.getHeight();
|
||||
int length = easyCaptchaConfig.getLength();
|
||||
String fontName = easyCaptchaConfig.getFontName();
|
||||
int width = captchaConfig.getWidth();
|
||||
int height = captchaConfig.getHeight();
|
||||
int length = captchaConfig.getLength();
|
||||
String fontName = captchaConfig.getFontName();
|
||||
|
||||
switch (easyCaptchaConfig.getType()) {
|
||||
switch (captchaConfig.getType()) {
|
||||
case ARITHMETIC:
|
||||
captcha = new ArithmeticCaptcha(width, height);
|
||||
//固定设置为两位,图片为算数运算表达式
|
||||
@@ -52,7 +52,7 @@ public class EasyCaptchaProducer {
|
||||
default:
|
||||
throw new RuntimeException("验证码配置信息错误!正确配置查看 CaptchaTypeEnum ");
|
||||
}
|
||||
captcha.setFont(new Font(fontName, easyCaptchaConfig.getFontStyle(), easyCaptchaConfig.getFontSize()));
|
||||
captcha.setFont(new Font(fontName, captchaConfig.getFontStyle(), captchaConfig.getFontSize()));
|
||||
return captcha;
|
||||
|
||||
}
|
||||
@@ -1,24 +1,23 @@
|
||||
package com.youlai.system.framework.easycaptcha.service;
|
||||
package com.youlai.system.security.captcha;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.wf.captcha.base.Captcha;
|
||||
import com.youlai.system.common.constant.SecurityConstants;
|
||||
import com.youlai.system.framework.easycaptcha.config.EasyCaptchaConfig;
|
||||
import com.youlai.system.framework.easycaptcha.producer.EasyCaptchaProducer;
|
||||
import com.youlai.system.pojo.dto.CaptchaResult;
|
||||
import com.youlai.system.config.CaptchaConfig;
|
||||
import com.youlai.system.model.dto.CaptchaResult;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* EasyCaptcha 业务类
|
||||
*
|
||||
* @author: haoxr
|
||||
* @date: 2023/03/24
|
||||
* @author haoxr
|
||||
* @since 2023/03/24
|
||||
*/
|
||||
@Service
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class EasyCaptchaService {
|
||||
|
||||
@@ -26,7 +25,7 @@ public class EasyCaptchaService {
|
||||
|
||||
private final RedisTemplate redisTemplate;
|
||||
|
||||
private final EasyCaptchaConfig easyCaptchaConfig;
|
||||
private final CaptchaConfig captchaConfig;
|
||||
|
||||
/**
|
||||
* 获取验证码
|
||||
@@ -42,13 +41,12 @@ public class EasyCaptchaService {
|
||||
// 验证码文本缓存至Redis,用于登录校验
|
||||
String verifyCodeKey = IdUtil.fastSimpleUUID();
|
||||
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)
|
||||
.verifyCodeBase64(captchaBase64)
|
||||
.build();
|
||||
return captchaResult;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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.util.ResponseUtils;
|
||||
@@ -14,7 +14,7 @@ import java.io.IOException;
|
||||
* Spring Security访问异常处理器
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/18
|
||||
* @since 2022/10/18
|
||||
*/
|
||||
@Component
|
||||
public class MyAccessDeniedHandler implements AccessDeniedHandler {
|
||||
@@ -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.util.ResponseUtils;
|
||||
@@ -15,7 +15,7 @@ import java.io.IOException;
|
||||
* 认证异常处理
|
||||
*
|
||||
* @author haoxr
|
||||
* @date 2022/10/18
|
||||
* @since 2022/10/18
|
||||
*/
|
||||
@Component
|
||||
public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {
|
||||
@@ -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.util.StrUtil;
|
||||
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.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.PatternMatchUtils;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* SpringSecurity权限校验
|
||||
* SpringSecurity 权限校验
|
||||
*
|
||||
* @author haoxr
|
||||
* @since 2022/2/22
|
||||
*/
|
||||
@Service("ss")
|
||||
@Component("ss")
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class PermissionService {
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.youlai.system.framework.security.userdetails;
|
||||
package com.youlai.system.security.userdetails;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.youlai.system.pojo.bo.UserAuthInfo;
|
||||
import com.youlai.system.model.dto.UserAuthInfo;
|
||||
import lombok.Data;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user