# trident-micro-core
**Repository Path**: technology-base/trident-micro-core
## Basic Information
- **Project Name**: trident-micro-core
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-12-06
- **Last Updated**: 2023-12-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Trident用于集成微服务的核心包(基于trident-core)
### 1.pom中引入微服务模块,和redis模块
```xml
x.trident
micro-spring-boot-starter
${trident.version}
x.trident
trident-redis-spring-boot-starter
${trident.version}
```
### 2.application.yml中scanner开启urlWithAppCode开关
````yml
scanner:
open: true
urlWithAppCode: true
# nacos配置
spring:
cloud:
nacos:
discovery:
enabled: true
register-enabled: true
watch-delay: 1000
# feign远程调用配置
feign:
sentinel:
enabled: true
client:
config:
# 全局配置
default:
# NONE不记录任何日志--BASIC仅请求方法URL,状态码执行时间等--HEADERS在BASIC基础上记录header等--FULL记录所有
loggerLevel: full
connectTimeout: 500 #连接超时时间
readTimeout: 5000 #连接超时时间
errorDecoder: TridentFeignErrorDecoder
requestInterceptors:
- TridentFeignHeaderProcessInterceptor
httpclient:
# 让feign使用apache httpclient做请求;而不是默认的urlConnection
enabled: true
# feign的最大连接数
max-connections: 200
# feign单个路径的最大连接数
max-connections-per-route: 50
# actuator配置,给spring boot admin监控用
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
````
### 3.application-local.yml增加nacos和sentinel控制台配置
```yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: localhost:8999
redis:
host: localhost
port: 6379
password:
```
### 4.剔除两个权限拦截器
微服务版本鉴权放在网关了,所以剔除掉原有项目的两个拦截器
SpringMvcConfiguration中配置addInterceptors方法,删除两个拦截器的配置
AuthJwtTokenSecurityInterceptor和PermissionSecurityInterceptor两个类去除@Component注解
### 5.添加新的基于Redis的用户缓存类
把本类复制到项目config包下即可。
```java
import x.trident.core.auth.api.pojo.login.LoginUser;
import x.trident.core.auth.session.cache.logintoken.RedisLoginTokenCache;
import x.trident.core.auth.session.cache.loginuser.RedisLoginUserCache;
import x.trident.core.auth.session.timer.ClearInvalidLoginUserCacheTimer;
import x.trident.core.cache.redis.util.CreateRedisTemplateUtil;
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 java.util.Set;
/**
* 认证和鉴权模块的自动配置
*/
@Configuration
public class RedisBaseAuthConfig {
/**
* 登录用户缓存的redis操作类
*/
@Bean
public RedisTemplate loginUserRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return CreateRedisTemplateUtil.createObject(redisConnectionFactory);
}
/**
* token缓存的redis操作类
*/
@Bean
public RedisTemplate> loginTokenCache(RedisConnectionFactory redisConnectionFactory) {
return CreateRedisTemplateUtil.createObject(redisConnectionFactory);
}
/**
* 登录用户的缓存,使用redis方式
*/
@Bean(name = "loginUserCache")
public RedisLoginUserCache loginUserCache(RedisTemplate loginUserRedisTemplate) {
return new RedisLoginUserCache(loginUserRedisTemplate);
}
/**
* 登录用户token的缓存,使用redis方式
*/
@Bean(name = "allPlaceLoginTokenCache")
public RedisLoginTokenCache allPlaceLoginTokenCache(RedisTemplate> loginTokenCache) {
return new RedisLoginTokenCache(loginTokenCache);
}
/**
* 清空无用登录用户缓存的定时任务
*/
@Bean
public ClearInvalidLoginUserCacheTimer clearInvalidLoginUserCacheTimer(RedisTemplate loginUserRedisTemplate, RedisTemplate> loginTokenCache) {
return new ClearInvalidLoginUserCacheTimer(loginUserCache(loginUserRedisTemplate), allPlaceLoginTokenCache(loginTokenCache));
}
}
```
### 6.添加新的基于Redis的资源缓存
```java
import x.trident.core.cache.api.CacheOperatorApi;
import x.trident.core.cache.redis.util.CreateRedisTemplateUtil;
import x.trident.core.scanner.api.pojo.resource.ResourceDefinition;
import x.trident.core.system.modular.resource.cache.RedisResourceCache;
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;
/**
* 资源缓存自动配置
*/
@Configuration
public class RedisBaseResourceCacheConfig {
/**
* 资源缓存
*/
@Bean(name = "resourceCache")
public CacheOperatorApi resourceCache(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = CreateRedisTemplateUtil.createObject(redisConnectionFactory);
return new RedisResourceCache(redisTemplate);
}
}
```
### 7.如果项目只是需要rest接口,可以把beetl去掉
将system-integration-beetl替换为system-integration-rest
```xml
x.trident
system-integration-rest
${trident.version}
```
### 8.校对jwt的认证秘钥(重要)
检查sys_config表中,jwt的认证秘钥,是否和网关的jwt解析秘钥一致。
注意,这个秘钥,一定要和网关的jwt解析秘钥保持一致,否则将会登录不到系统
```sql
INSERT INTO `sys_config`(`config_id`, `config_name`, `config_code`, `config_value`, `sys_flag`, `remark`, `status_flag`,
`group_code`, `del_flag`, `create_time`, `create_user`, `update_time`, `update_user`)
VALUES (1394587728004460545, '用于认证的jwt的秘钥(上线记得修改)', 'SYS_AUTH_JWT_SECRET', 'y5TRmrHFOVQwsWr7Egj35tZd25EZ', 'Y', '1', 1,
'auth_config', 'N', NULL, NULL, NULL, NULL);
```
### 9.前端配置修改
vue.config.js文件中,修改pathRewrite
```js
devServer: {
host: '0.0.0.0',
port
:
8000,
proxy
:
{
'/api'
:
{
target: process.env.VUE_APP_API_BASE_URL,
changeOrigin
:
true,
pathRewrite
:
{
'/api'
:
'/trident'
}
}
}
}
,
```
### 10.注意事项
当第一次使用系统,会自动初始化系统需要的秘钥,jwt秘钥会随机生成,从新生成后,可能导致和网关的jwt秘钥不一致
所以,在初始化之后,可以重启一下网关和system服务,再校对一下秘钥一致。