# 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服务,再校对一下秘钥一致。