# know-repo **Repository Path**: michaelmaster/know ## Basic Information - **Project Name**: know-repo - **Description**: 微服务相关集成1111 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-08 - **Last Updated**: 2022-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 所有注入类配置文件@lazy Feign使用okhttp不使用httpclient 1. ace-auth-server: 1>.启动监听类CommandLineRunner 从redis中加载用户公钥私钥和服务公钥私钥初始化keyConfiguration, 如果redis中不存在根据配置文件中的secret生成用户公钥私钥和服务公钥私钥并存入redis,初始化keyConfiguration 2>.通过WebMvcConfigurer将ServiceAuthRestInterceptor和UserAuthRestInterceptor,注册到拦截器并设置拦截条件 3>.配置Feign请求拦截器(feign.RequestInterceptor), 实现在requestTemplate的请求头中添加clientToken, 实现各个微服务之间token参数的自动传递 [至此本项目中的三个拦截器全部介绍完] 4>.主要给auth-client提供服务,包括所有重要配置,各个公钥私钥的获取加载 2. ace-auth-client: 1>.启动监听类CommandLineRunner 利用Feign从ace-auth-server中获取用户公钥和 服务公钥 (根据clientId clientId(token)用于验证是哪个微服务过来的请求是否会验签失败) 2>.同样3个拦截器 1).[OkHttpTokenInterceptor implements Interceptor ] 拦截器中判断response.code()是否为HttpStatus.FORBIDDEN 如果是的话 证明已经过期需要刷新clientToken并将token放入请求头里 2).[ServiceAuthRestInterceptor extends HandlerInterceptorAdapter] 排除有IgnoreClientToken注解的方法 其他方法全部拦截检查header中的token 延签解密后是否是允许通过的clientid 3).[UserAuthRestInterceptor extends HandlerInterceptorAdapter] 排除有IgnoreUserToken注解的方法 其他方法全部拦截检查header或者cookie中的token 延签解密后如果成功将token中的用户信息存入BaseContextHandler 并在拦截器的afterCompletion方法中删除BaseContextHandler 4). 3. ace-gateway-v2 网关的核心逻辑是在AccessGatewayFilter,它继承GlobalFilter接口并实现filter方法 filter方法核心只做了3件事: 1从request请求拿到访客的user信息 2判断用户是否有权限访问api 3给合法的请求生成一个新的token 这个地方,前端用户会传来一个用户的token,后端api鉴权也需要检查客户端的token,很容易让人误解它们是同一个token, 但其实它们不是同一个值,虽然它们都是存放在head的Authorization属性 用户的token仅做身份认证,api的token由网关负责管理,不对外暴露 3.1 过滤器 放在common中 各种过滤器可以通过2种方式注册到spring容器 1.通过@component等 (如果是common项目需要先@componentScan路径) 2.通过@Configuration+@bean方式new出来 4. jwt使用rs256加密 5. 全局异常 放在common中 拦截token异常的code 将token异常code和多个tokenkey,prikey,pubkey从nacos获取 6. nacos动态刷新配置 需要添加注解@RefreshScope否则只有服务启动的时候会读取一次nacos中的配置 7. 将代码放入git 8. @EnableAuthCommon 使用注解 在注解中@Import 配置类 在配置类中@componentScan需要托管的类路径 50. nacos: http://172.16.14.220:8848/nacos/index.html com.genius.know