集成 Spring Boot Admin 监控服务端及客户端依赖,并新增 AdminServerConfig 配置类启用应用监控。

This commit is contained in:
Ray.Hao
2026-03-16 08:09:03 +08:00
parent 2931153422
commit 63c8cbc873
45 changed files with 257 additions and 140 deletions

View File

@@ -0,0 +1,20 @@
package com.youlai.boot.config;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.context.annotation.Configuration;
/**
* Spring Boot Admin Server 配置
* <p>
* 启用应用监控服务端,提供可视化监控界面。
* 访问地址http://localhost:8800/admin
* </p>
*
* @author Ray
* @since 2024/1/1
*/
@Configuration
@EnableAdminServer
public class AdminServerConfig {
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.plugin.knife4j;
package com.youlai.boot.config;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
@@ -147,4 +147,4 @@ public class Knife4jOpenApiCustomizer extends com.github.xiaoymin.knife4j.spring
}
return classes;
}
}
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.plugin.mybatis;
package com.youlai.boot.config;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.plugin.mybatis;
package com.youlai.boot.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.RequiredArgsConstructor;

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.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.youlai.boot.plugin.mybatis.MyDataPermissionHandler;
import com.youlai.boot.plugin.mybatis.MyMetaObjectHandler;
import com.youlai.boot.config.MyDataPermissionHandler;
import com.youlai.boot.config.MyMetaObjectHandler;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.beans.factory.annotation.Value;

View File

@@ -1,9 +1,15 @@
package com.youlai.boot.config;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
/**
@@ -29,11 +35,21 @@ public class RedisConfig {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// Key 使用 String 序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
// Value 使用自定义 JSON 序列化(不写入类型信息,避免 HashSet 等集合被序列化成带 @class 的结构)
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 禁用类型信息写入,避免集合类型名被当成元素
objectMapper.disableDefaultTyping();
Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
redisTemplate.setValueSerializer(jsonSerializer);
redisTemplate.setHashValueSerializer(jsonSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;

View File

@@ -14,7 +14,6 @@ import com.youlai.boot.security.provider.WechatMiniAuthenticationProvider;
import com.youlai.boot.security.token.TokenManager;
import com.youlai.boot.security.service.SysUserDetailsService;
import com.youlai.boot.system.service.ConfigService;
import com.youlai.boot.system.service.UserSocialService;
import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
@@ -33,6 +32,9 @@ import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.*;
/**
* Spring Security 配置类
@@ -58,17 +60,17 @@ public class SecurityConfig {
private final SecurityProperties securityProperties;
private final WxMaService wxMaService;
private final UserSocialService userSocialService;
private final RequestMappingHandlerMapping requestMappingHandlerMapping;
/**
* 配置安全过滤链 SecurityFilterChain
*/
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(requestMatcherRegistry -> {
// 配置无需登录即可访问的公开接口
// 配置无需登录即可访问的公开接口(配置文件方式)
String[] ignoreUrls = securityProperties.getIgnoreUrls();
if (ArrayUtil.isNotEmpty(ignoreUrls)) {
requestMatcherRegistry.requestMatchers(ignoreUrls).permitAll();
@@ -138,8 +140,11 @@ public class SecurityConfig {
* 微信小程序认证 Provider
*/
@Bean
public WechatMiniAuthenticationProvider wechatMiniAuthenticationProvider() {
return new WechatMiniAuthenticationProvider(wxMaService, userSocialService);
public WechatMiniAuthenticationProvider wechatMiniAuthenticationProvider(
WxMaService wxMaService,
SysUserDetailsService sysUserDetailsService
) {
return new WechatMiniAuthenticationProvider(wxMaService, sysUserDetailsService);
}
/**
@@ -157,4 +162,5 @@ public class SecurityConfig {
wechatMiniAuthenticationProvider
);
}
}

View File

@@ -1,17 +1,17 @@
package com.youlai.boot.tool.codegen.controller;
package com.youlai.boot.module.codegen.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.tool.codegen.service.CodegenService;
import com.youlai.boot.tool.codegen.model.form.GenConfigForm;
import com.youlai.boot.tool.codegen.model.query.TableQuery;
import com.youlai.boot.tool.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.tool.codegen.model.vo.TablePageVO;
import com.youlai.boot.module.codegen.service.CodegenService;
import com.youlai.boot.module.codegen.model.form.GenConfigForm;
import com.youlai.boot.module.codegen.model.query.TableQuery;
import com.youlai.boot.module.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.module.codegen.model.vo.TablePageVO;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.tool.codegen.service.GenTableService;
import com.youlai.boot.module.codegen.service.GenTableService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -106,8 +106,8 @@ public class CodegenController {
outputStream.write(data);
outputStream.flush();
} catch (IOException e) {
log.error("Error while writing the zip file to response", e);
throw new RuntimeException("Failed to write the zip file to response", e);
log.error("Error while writing the zip file1 to response", e);
throw new RuntimeException("Failed to write the zip file1 to response", e);
}
}
}

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.tool.codegen.converter;
package com.youlai.boot.module.codegen.converter;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.tool.codegen.model.form.GenConfigForm;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.model.form.GenConfigForm;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@@ -38,4 +38,4 @@ public interface CodegenConverter {
GenTableColumn toGenTableColumn(GenConfigForm.FieldConfig fieldConfig);
}
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.enums;
package com.youlai.boot.module.codegen.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.enums;
package com.youlai.boot.module.codegen.enums;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.enums;
package com.youlai.boot.module.codegen.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;

View File

@@ -1,11 +1,11 @@
package com.youlai.boot.tool.codegen.mapper;
package com.youlai.boot.module.codegen.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.tool.codegen.model.bo.ColumnMetaData;
import com.youlai.boot.tool.codegen.model.bo.TableMetaData;
import com.youlai.boot.tool.codegen.model.query.TableQuery;
import com.youlai.boot.tool.codegen.model.vo.TablePageVO;
import com.youlai.boot.module.codegen.model.bo.ColumnMetaData;
import com.youlai.boot.module.codegen.model.bo.TableMetaData;
import com.youlai.boot.module.codegen.model.query.TableQuery;
import com.youlai.boot.module.codegen.model.vo.TablePageVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.tool.codegen.mapper;
package com.youlai.boot.module.codegen.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
import org.apache.ibatis.annotations.Mapper;
/**

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.tool.codegen.mapper;
package com.youlai.boot.module.codegen.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import org.apache.ibatis.annotations.Mapper;
/**

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.bo;
package com.youlai.boot.module.codegen.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.bo;
package com.youlai.boot.module.codegen.model.bo;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.entity;
package com.youlai.boot.module.codegen.model.entity;
import com.baomidou.mybatisplus.annotation.*;

View File

@@ -1,12 +1,12 @@
package com.youlai.boot.tool.codegen.model.entity;
package com.youlai.boot.module.codegen.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.tool.codegen.enums.FormTypeEnum;
import com.youlai.boot.tool.codegen.enums.QueryTypeEnum;
import com.youlai.boot.module.codegen.enums.FormTypeEnum;
import com.youlai.boot.module.codegen.enums.QueryTypeEnum;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.tool.codegen.model.form;
package com.youlai.boot.module.codegen.model.form;
import com.youlai.boot.tool.codegen.enums.FormTypeEnum;
import com.youlai.boot.tool.codegen.enums.QueryTypeEnum;
import com.youlai.boot.module.codegen.enums.FormTypeEnum;
import com.youlai.boot.module.codegen.enums.QueryTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.query;
package com.youlai.boot.module.codegen.model.query;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BaseQuery;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.query;
package com.youlai.boot.module.codegen.model.query;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BaseQuery;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.vo;
package com.youlai.boot.module.codegen.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.model.vo;
package com.youlai.boot.module.codegen.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.tool.codegen.service;
package com.youlai.boot.module.codegen.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.tool.codegen.model.query.TableQuery;
import com.youlai.boot.tool.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.tool.codegen.model.vo.TablePageVO;
import com.youlai.boot.module.codegen.model.query.TableQuery;
import com.youlai.boot.module.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.module.codegen.model.vo.TablePageVO;
import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.tool.codegen.service;
package com.youlai.boot.module.codegen.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
/**
* 代码生成配置接口

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.tool.codegen.service;
package com.youlai.boot.module.codegen.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.tool.codegen.model.form.GenConfigForm;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.form.GenConfigForm;
/**
* 代码生成配置接口

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.service.impl;
package com.youlai.boot.module.codegen.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
@@ -11,18 +11,18 @@ import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.tool.codegen.enums.JavaTypeEnum;
import com.youlai.boot.module.codegen.enums.JavaTypeEnum;
import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.tool.codegen.service.GenTableService;
import com.youlai.boot.tool.codegen.service.GenTableColumnService;
import com.youlai.boot.tool.codegen.service.CodegenService;
import com.youlai.boot.module.codegen.service.GenTableService;
import com.youlai.boot.module.codegen.service.GenTableColumnService;
import com.youlai.boot.module.codegen.service.CodegenService;
import com.youlai.boot.core.exception.BusinessException;
import com.youlai.boot.tool.codegen.mapper.DatabaseMapper;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.tool.codegen.model.query.TableQuery;
import com.youlai.boot.tool.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.tool.codegen.model.vo.TablePageVO;
import com.youlai.boot.module.codegen.mapper.DatabaseMapper;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.model.query.TableQuery;
import com.youlai.boot.module.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.module.codegen.model.vo.TablePageVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -390,7 +390,7 @@ public class CodegenServiceImpl implements CodegenService {
} catch (IOException e) {
log.error("Error while generating zip for code download", e);
throw new RuntimeException("Failed to generate code zip file", e);
throw new RuntimeException("Failed to generate code zip file1", e);
}
}
@@ -421,7 +421,7 @@ public class CodegenServiceImpl implements CodegenService {
zip.closeEntry();
} catch (IOException e) {
log.error("Error while adding file {} to zip", fileName, e);
log.error("Error while adding file1 {} to zip", fileName, e);
}
}
}

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.tool.codegen.service.impl;
package com.youlai.boot.module.codegen.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.tool.codegen.mapper.GenTableColumnMapper;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.tool.codegen.service.GenTableColumnService;
import com.youlai.boot.module.codegen.mapper.GenTableColumnMapper;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.service.GenTableColumnService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.tool.codegen.service.impl;
package com.youlai.boot.module.codegen.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
@@ -7,21 +7,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.YouLaiBootApplication;
import com.youlai.boot.common.enums.EnvEnum;
import com.youlai.boot.tool.codegen.enums.FormTypeEnum;
import com.youlai.boot.tool.codegen.enums.JavaTypeEnum;
import com.youlai.boot.tool.codegen.enums.QueryTypeEnum;
import com.youlai.boot.module.codegen.enums.FormTypeEnum;
import com.youlai.boot.module.codegen.enums.JavaTypeEnum;
import com.youlai.boot.module.codegen.enums.QueryTypeEnum;
import com.youlai.boot.core.exception.BusinessException;
import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.tool.codegen.converter.CodegenConverter;
import com.youlai.boot.tool.codegen.mapper.DatabaseMapper;
import com.youlai.boot.tool.codegen.mapper.GenTableMapper;
import com.youlai.boot.tool.codegen.model.bo.ColumnMetaData;
import com.youlai.boot.tool.codegen.model.bo.TableMetaData;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.tool.codegen.model.entity.GenTableColumn;
import com.youlai.boot.tool.codegen.model.form.GenConfigForm;
import com.youlai.boot.tool.codegen.service.GenTableService;
import com.youlai.boot.tool.codegen.service.GenTableColumnService;
import com.youlai.boot.module.codegen.converter.CodegenConverter;
import com.youlai.boot.module.codegen.mapper.DatabaseMapper;
import com.youlai.boot.module.codegen.mapper.GenTableMapper;
import com.youlai.boot.module.codegen.model.bo.ColumnMetaData;
import com.youlai.boot.module.codegen.model.bo.TableMetaData;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
import com.youlai.boot.module.codegen.model.form.GenConfigForm;
import com.youlai.boot.module.codegen.service.GenTableService;
import com.youlai.boot.module.codegen.service.GenTableColumnService;
import com.youlai.boot.system.service.MenuService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.file.controller;
package com.youlai.boot.module.file.controller;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.file.service.FileService;
import com.youlai.boot.file.model.FileInfo;
import com.youlai.boot.module.file.service.FileService;
import com.youlai.boot.module.file.model.FileInfo;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -31,13 +31,13 @@ public class FileController {
@Operation(summary = "文件上传")
public Result<FileInfo> uploadFile(
@Parameter(
name = "file",
name = "file1",
description = "表单文件对象",
required = true,
in = ParameterIn.DEFAULT,
schema = @Schema(name = "file", format = "binary")
schema = @Schema(name = "file1", format = "binary")
)
@RequestPart(value = "file") MultipartFile file
@RequestPart(value = "file1") MultipartFile file
) {
FileInfo fileInfo = fileService.uploadFile(file);
return Result.success(fileInfo);

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.file.model;
package com.youlai.boot.module.file.model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.file.service;
package com.youlai.boot.module.file.service;
import com.youlai.boot.file.model.FileInfo;
import com.youlai.boot.module.file.model.FileInfo;
import org.springframework.web.multipart.MultipartFile;
/**

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.file.service.impl;
package com.youlai.boot.module.file.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
@@ -8,8 +8,8 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.youlai.boot.file.service.FileService;
import com.youlai.boot.file.model.FileInfo;
import com.youlai.boot.module.file.service.FileService;
import com.youlai.boot.module.file.model.FileInfo;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import lombok.RequiredArgsConstructor;

View File

@@ -1,11 +1,11 @@
package com.youlai.boot.file.service.impl;
package com.youlai.boot.module.file.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.youlai.boot.file.model.FileInfo;
import com.youlai.boot.file.service.FileService;
import com.youlai.boot.module.file.model.FileInfo;
import com.youlai.boot.module.file.service.FileService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.file.service.impl;
package com.youlai.boot.module.file.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
@@ -7,8 +7,8 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.youlai.boot.core.exception.BusinessException;
import com.youlai.boot.core.web.ResultCode;
import com.youlai.boot.file.model.FileInfo;
import com.youlai.boot.file.service.FileService;
import com.youlai.boot.module.file.model.FileInfo;
import com.youlai.boot.module.file.service.FileService;
import io.minio.*;
import io.minio.http.Method;
import jakarta.annotation.PostConstruct;

View File

@@ -7,9 +7,8 @@ import com.youlai.boot.security.exception.NeedBindMobileException;
import com.youlai.boot.security.model.SysUserDetails;
import com.youlai.boot.security.model.UserAuthInfo;
import com.youlai.boot.security.model.WechatMiniAuthenticationToken;
import com.youlai.boot.system.enums.SocialPlatformEnum;
import com.youlai.boot.security.service.SysUserDetailsService;
import com.youlai.boot.system.model.entity.UserSocial;
import com.youlai.boot.system.service.UserSocialService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
@@ -27,7 +26,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
public class WechatMiniAuthenticationProvider implements AuthenticationProvider {
private final WxMaService wxMaService;
private final UserSocialService userSocialService;
private final SysUserDetailsService sysUserDetailsService;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
@@ -47,7 +46,7 @@ public class WechatMiniAuthenticationProvider implements AuthenticationProvider
log.info("微信小程序登录openid={}", openid);
// 2. 根据 openid 查询绑定信息
UserSocial userSocial = userSocialService.getByPlatformAndOpenid(SocialPlatformEnum.WECHAT_MINI, openid);
UserSocial userSocial = sysUserDetailsService.getWechatMiniBindInfo(openid);
if (userSocial == null) {
// 未绑定,抛出异常提示需要绑定手机号
@@ -56,7 +55,7 @@ public class WechatMiniAuthenticationProvider implements AuthenticationProvider
}
// 3. 获取用户认证信息
UserAuthInfo userAuthInfo = userSocialService.getAuthInfoByOpenid(SocialPlatformEnum.WECHAT_MINI, openid);
UserAuthInfo userAuthInfo = sysUserDetailsService.getAuthInfoByWechatOpenid(openid);
if (userAuthInfo == null) {
log.warn("微信小程序登录失败用户不存在openid={}", openid);
@@ -70,7 +69,7 @@ public class WechatMiniAuthenticationProvider implements AuthenticationProvider
}
// 5. 更新 session_key
userSocialService.updateSessionKey(userSocial.getId(), sessionKey);
sysUserDetailsService.updateWechatSessionKey(userSocial.getId(), sessionKey);
// 6. 构建已认证 Token
SysUserDetails userDetails = new SysUserDetails(userAuthInfo);

View File

@@ -2,6 +2,9 @@ package com.youlai.boot.security.service;
import com.youlai.boot.security.model.SysUserDetails;
import com.youlai.boot.security.model.UserAuthInfo;
import com.youlai.boot.system.enums.SocialPlatformEnum;
import com.youlai.boot.system.model.entity.UserSocial;
import com.youlai.boot.system.service.UserSocialService;
import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -22,6 +25,7 @@ import org.springframework.stereotype.Service;
public class SysUserDetailsService implements UserDetailsService {
private final UserService userService;
private final UserSocialService userSocialService;
/**
* 根据用户名获取用户信息
@@ -45,4 +49,34 @@ public class SysUserDetailsService implements UserDetailsService {
throw e;
}
}
/**
* 根据微信小程序openid查询绑定信息
*
* @param openid 微信小程序openid
* @return 绑定信息未绑定返回null
*/
public UserSocial getWechatMiniBindInfo(String openid) {
return userSocialService.getByPlatformAndOpenid(SocialPlatformEnum.WECHAT_MINI, openid);
}
/**
* 根据微信小程序openid获取用户认证信息
*
* @param openid 微信小程序openid
* @return 用户认证信息用户不存在返回null
*/
public UserAuthInfo getAuthInfoByWechatOpenid(String openid) {
return userSocialService.getAuthInfoByOpenid(SocialPlatformEnum.WECHAT_MINI, openid);
}
/**
* 更新微信小程序session_key
*
* @param bindId 绑定记录ID
* @param sessionKey session_key
*/
public void updateWechatSessionKey(Long bindId, String sessionKey) {
userSocialService.updateSessionKey(bindId, sessionKey);
}
}

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.Menu;
@@ -13,7 +13,7 @@ import java.util.List;
/**
* 菜单业务接口
*
*
* @author haoxr
* @since 2020/11/06
*/
@@ -52,7 +52,7 @@ public interface MenuService extends IService<Menu> {
/**
* 修改菜单显示状态
*
*
* @param menuId 菜单ID
* @param visible 是否显示(1-显示 0-隐藏)
*/

View File

@@ -7,7 +7,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.tool.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.security.util.SecurityUtils;
import com.youlai.boot.system.converter.MenuConverter;
import com.youlai.boot.system.mapper.MenuMapper;