微服务版后端初始化

This commit is contained in:
yaoyn
2025-02-08 17:51:37 +08:00
parent 54af6be188
commit da009a7cc4
1897 changed files with 429541 additions and 81 deletions

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>xjrsoft-common</artifactId>
<groupId>com.xjrsoft</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>xjrsoft-common-magicapi</artifactId>
<properties>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.xjrsoft</groupId>
<artifactId>xjrsoft-common-core</artifactId>
<version>${xjrsoft.framework.version}</version>
</dependency>
<dependency>
<groupId>com.xjrsoft</groupId>
<artifactId>xjrsoft-common-mybatis</artifactId>
<version>${xjrsoft.framework.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,57 @@
package com.xjrsoft.common.magicapi;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
import com.xjrsoft.common.core.constant.GlobalConstant;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: tzx
* @Date: 2023/10/8 16:10
*/
@AllArgsConstructor
public class MagicApiAutoConfiguration implements WebMvcConfigurer {
private final DynamicDataSourceProvider dynamicDataSourceProvider;
private final Map<String, String> datasourceMap = new HashMap<>();
/**
* 配置MagicApi多数据源
*
* @return
*/
@Bean
public MagicDynamicDataSource magicDynamicDataSource() {
MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
Map<String, DataSource> dataSources = dynamicDataSourceProvider.loadDataSources();
for (String ds : dataSources.keySet()) {
if (StrUtil.equals(GlobalConstant.DEFAULT_DATASOURCE_KEY, ds)) {
dynamicDataSource.setDefault(dataSources.get(ds));
} else {
//缓存起来的name
if (datasourceMap.containsKey(ds)) {
String name = MapUtil.getStr(datasourceMap, ds);
dynamicDataSource.add(name, dataSources.get(ds));
}
//配置在yml上的 可能获取不到name
else {
dynamicDataSource.add("datasource_" + ds, dataSources.get(ds));
}
}
}
return dynamicDataSource;
}
}

View File

@ -0,0 +1,26 @@
package com.xjrsoft.common.magicapi.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* magic-api 配置
* @author tzx
*/
@Data
@Configuration
@ConfigurationProperties("magic-api")
public class MagicApiConfig {
/**
* 页面地址 magic-api
*/
private String web;
/**
* 接口前缀
*/
private String prefix;
}

View File

@ -0,0 +1,63 @@
package com.xjrsoft.common.magicapi.interceptor;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.strategy.SaStrategy;
import com.xjrsoft.common.core.constant.GlobalConstant;
import com.xjrsoft.common.core.domain.result.R;
import com.xjrsoft.common.core.enums.ResponseCode;
import com.xjrsoft.tenant.util.SecureUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.context.RequestEntity;
import org.ssssssss.magicapi.core.interceptor.RequestInterceptor;
import java.util.ArrayList;
import java.util.List;
/**
* magic-api 接口鉴权
*
* @author tzx
*/
@Component
@Slf4j
public class MagicApiRequestInterceptor implements RequestInterceptor {
/***
* 接口请求之前
* @param requestEntity
* @return
*/
@Override
public Object preHandle(RequestEntity requestEntity) {
if(!StpUtil.isLogin()){
return R.error(ResponseCode.UN_AUTHORIZED.getCode(),ResponseCode.UN_AUTHORIZED.getMessage());
}
SaSession tokenSession = StpUtil.getTokenSession();
List<Long> roleIds = tokenSession.get(GlobalConstant.LOGIN_USER_ROLE_ID_KEY, new ArrayList<>());
//非管理员需要进行权限验证
if(!SecureUtil.isAdmin(roleIds)) {
if (!SaStrategy.me.hasElement.apply(tokenSession.get(GlobalConstant.LOGIN_USER_INTERFACE_AUTH_CODE_KEY, new ArrayList<>()), requestEntity.getApiInfo().getId())) {
return R.error(ResponseCode.MAGIC_API_UN_AUTHORIZED.getCode(), ResponseCode.MAGIC_API_UN_AUTHORIZED.getMessage());
}
}
return null;
}
/**
* 接口执行之后
* @param requestEntity
* @param returnValue
* @return
*/
@Override
public Object postHandle(RequestEntity requestEntity, Object returnValue) {
log.info("{} 执行完毕,返回结果:{}", requestEntity.getApiInfo().getName(), returnValue);
return null;
}
}