From 3c3a199a1a115616cffe85c2dd32d83417ed9f42 Mon Sep 17 00:00:00 2001 From: super_liu <396572590@qq.com> Date: Mon, 11 Oct 2021 17:45:30 +0800 Subject: [PATCH] feat: There is no way the idm and oa --- .../com/adc/da/FeignClient/FeignConfig.java | 30 +++++++++++++++++++ .../adc/da/http/ResponseMessageCodeEnum.java | 1 + .../exception/TokenRuntimeException.java | 2 +- .../da/login/rest/LoginRestController.java | 10 ++++--- .../da/login/security/TokenInterceptor.java | 4 +-- .../adc/da/login/security/WebMvcConfig.java | 6 ++++ .../java/com/adc/da/login/util/JwtUtils.java | 13 +++++--- .../main/advice/AdcDaBaseExceptionAdvice.java | 5 ++++ 8 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 adc-da-activiti/src/main/java/com/adc/da/FeignClient/FeignConfig.java diff --git a/adc-da-activiti/src/main/java/com/adc/da/FeignClient/FeignConfig.java b/adc-da-activiti/src/main/java/com/adc/da/FeignClient/FeignConfig.java new file mode 100644 index 00000000..7a0de5dd --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/FeignClient/FeignConfig.java @@ -0,0 +1,30 @@ +package com.adc.da.FeignClient; + +import feign.RequestInterceptor; +import feign.RequestTemplate; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Description: TODO + * @author: super_liu + * @date: 2021年10月11日 13:33 + */ + +/** + * Feign配置 + * 使用FeignClient进行服务间调用,传递headers信息 + */ +@Configuration +public class FeignConfig implements RequestInterceptor { + @Override + public void apply(RequestTemplate requestTemplate) { + ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + //添加token + requestTemplate.header("token", request.getHeader("token")); + } +} diff --git a/adc-da-base/src/main/java/com/adc/da/http/ResponseMessageCodeEnum.java b/adc-da-base/src/main/java/com/adc/da/http/ResponseMessageCodeEnum.java index e4a0eff3..d913fab8 100644 --- a/adc-da-base/src/main/java/com/adc/da/http/ResponseMessageCodeEnum.java +++ b/adc-da-base/src/main/java/com/adc/da/http/ResponseMessageCodeEnum.java @@ -3,6 +3,7 @@ package com.adc.da.http; public enum ResponseMessageCodeEnum { SUCCESS("0"), ERROR("-1"), + ERROR_TOKEN("LE505"), VALID_ERROR("1000"), SAVE_SUCCESS("r0001"), UPDATE_SUCCESS("r0002"), diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/exception/TokenRuntimeException.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/exception/TokenRuntimeException.java index 089bf175..71be3519 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/exception/TokenRuntimeException.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/exception/TokenRuntimeException.java @@ -18,7 +18,7 @@ public class TokenRuntimeException extends RuntimeException{ private String msg; public TokenRuntimeException(String msg) { - this.msg = msg; + super(msg); } } diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java index 65f4d611..58c5ca33 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/rest/LoginRestController.java @@ -64,10 +64,9 @@ public class LoginRestController { } if (PasswordUtils.validatePassword(password, userEO.getPassword())) { String token = jwtUtils.generateToken(userEO.getUsid()); - response.setHeader("Authorization", token); - response.addHeader("Access-Control-Allow-Headers", "Authorization"); // 加密重要信息 BASE64Encoder encoder = new BASE64Encoder(); + userEO.setToken(token); String userStr = JSON.toJSONString(userEO); String userStr2 = URLEncoder.encode(userStr,"UTF-8"); userStr = encoder.encode(userStr2.getBytes()); @@ -87,14 +86,17 @@ public class LoginRestController { if(StringUtils.isBlank(account)){ return Result.error("r0011", "用户不存在"); } - UserEO userEO = userService.getUserByLoginNameNotDeleted("wenxianshun"); + /** + * TODO OA 用户不全 待同步 + */ + UserEO userEO = userService.getUserByLoginNameNotDeleted("admin"); if (null == userEO) { return Result.error("r0011", "用户不存在"); } if(userEO.getDisableFlag()==1){ return Result.error("r0011", "帐号已禁用"); } - String token = jwtUtils.generateToken("wenxianshun"); + String token = jwtUtils.generateToken(account); userEO.setToken(token); // 加密重要信息 BASE64Encoder encoder = new BASE64Encoder(); diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/TokenInterceptor.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/TokenInterceptor.java index 6385a6e4..35f48538 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/TokenInterceptor.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/TokenInterceptor.java @@ -49,7 +49,7 @@ public class TokenInterceptor extends HandlerInterceptorAdapter { if (null == claim) { System.out.println("token 解析错误"); // 这里可以自定义 抛出 token 异常 - throw new TokenRuntimeException("token 解析错误"); + throw new TokenRuntimeException("token解析错误"); } // 4、判断 token 是否过期 @@ -58,7 +58,7 @@ public class TokenInterceptor extends HandlerInterceptorAdapter { if (tokenExpired) { System.out.println("token已过期,请重新登录"); // 这里可以自定义 抛出 token 异常 - throw new TokenRuntimeException("token已过期,请重新登录"); + throw new TokenRuntimeException("token已过期"); } // 5、 从 token 中获取员工信息 diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java index 53a2c682..3db9c0d6 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java @@ -26,11 +26,17 @@ public class WebMvcConfig implements WebMvcConfigurer { InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor()); addInterceptor.excludePathPatterns("/api/loginIdm"); + /** + * TODO 测试流程 开放 login 接口 正式环境 关闭 + */ + addInterceptor.excludePathPatterns("/api/login"); addInterceptor.excludePathPatterns("/v2/api-docs"); addInterceptor.excludePathPatterns("/webjars/**"); addInterceptor.excludePathPatterns("/swagger-resources/**"); addInterceptor.excludePathPatterns("/swagger-ui.html"); addInterceptor.excludePathPatterns("/doc.html"); + addInterceptor.excludePathPatterns("/api/lawss/activiti/get_verify_by_instance"); + addInterceptor.excludePathPatterns("/api/sys/user/getById"); // 添加自定义拦截器,并拦截对应 url addInterceptor.addPathPatterns("/**"); diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/JwtUtils.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/JwtUtils.java index e3c47ae4..bbee74a1 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/JwtUtils.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/util/JwtUtils.java @@ -1,6 +1,7 @@ package com.adc.da.login.util; import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; @@ -42,12 +43,16 @@ public class JwtUtils { * 解析token */ public Claims getClaimsByToken(String token) { + Claims claims; try { - return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); - } catch (Exception e) { - System.out.println("validate is token error"); - return null; + claims = Jwts.parser() + .setSigningKey(secret) // 设置标识名 + .parseClaimsJws(token) //解析token + .getBody(); + } catch (ExpiredJwtException e) { + claims = e.getClaims(); } + return claims; } /** diff --git a/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java b/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java index 28cddf98..d67d92c7 100644 --- a/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java +++ b/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java @@ -33,6 +33,11 @@ public class AdcDaBaseExceptionAdvice { public ResponseMessage handlerAdcDaBaseException(Exception exception) { log.error(exception.getMessage(), exception); // TODO 在数据库中记录程序异常,这个地方的异常是未处理的异常,需要管理员查看并进行处理以防重复出现 + if(exception.getStackTrace() != null){ + if(exception.getMessage().equals("token已过期")){ + return Result.error(ResponseMessageCodeEnum.ERROR_TOKEN.getCode(), "token已过期,请重新登录"); + } + } return Result.error(ResponseMessageCodeEnum.ERROR.getCode(), "程序异常,请重试。如果重复出现请联系管理员处理!"); }