Browse Source

将外部应用认证-jwt方式-的customerId放到头里面,以便业务服务取用

dev_shibei_match
wxz 5 years ago
parent
commit
0322747773
  1. 3
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppAuthProcessor.java
  2. 6
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppJwtAuthProcessor.java
  3. 3
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppMD5AuthProcessor.java
  4. 4
      epmet-gateway/src/main/java/com/epmet/auth/ExternalAuthProcessor.java

3
epmet-gateway/src/main/java/com/epmet/auth/ExtAppAuthProcessor.java

@ -2,6 +2,7 @@ package com.epmet.auth;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.web.server.ServerWebExchange;
/** /**
@ -13,7 +14,7 @@ public abstract class ExtAppAuthProcessor {
private int diffMillins = 1000 * 60 * 5; private int diffMillins = 1000 * 60 * 5;
public abstract void auth(String appId, String token, Long ts); public abstract void auth(String appId, String token, Long ts, ServerWebExchange exchange);
/** /**
* 时间戳校验 * 时间戳校验

6
epmet-gateway/src/main/java/com/epmet/auth/ExtAppJwtAuthProcessor.java

@ -15,6 +15,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
/** /**
* jwt 认证处理器 * jwt 认证处理器
@ -31,7 +32,7 @@ public class ExtAppJwtAuthProcessor extends ExtAppAuthProcessor {
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Override @Override
public void auth(String appId, String token, Long ts) { public void auth(String appId, String token, Long ts, ServerWebExchange exchange) {
String secret; String secret;
if (StringUtils.isBlank(secret = getTokenFromCache(appId))) { if (StringUtils.isBlank(secret = getTokenFromCache(appId))) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), String.format("根据AppId:【%s】没有找到对应的秘钥", appId)); throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), String.format("根据AppId:【%s】没有找到对应的秘钥", appId));
@ -65,6 +66,9 @@ public class ExtAppJwtAuthProcessor extends ExtAppAuthProcessor {
logger.error("AppId不对应,token外部的:{}, token内部解析出来的:{}", appId, appIdIn); logger.error("AppId不对应,token外部的:{}, token内部解析出来的:{}", appId, appIdIn);
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AppId不匹配"); throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AppId不匹配");
} }
// 添加客户ID等到请求头
exchange.getRequest().mutate().header("CustomerId", customerId);
} }
/** /**

3
epmet-gateway/src/main/java/com/epmet/auth/ExtAppMD5AuthProcessor.java

@ -13,6 +13,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
/** /**
* md5 认证处理器 * md5 认证处理器
@ -29,7 +30,7 @@ public class ExtAppMD5AuthProcessor extends ExtAppAuthProcessor {
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Override @Override
public void auth(String appId, String token, Long ts) { public void auth(String appId, String token, Long ts, ServerWebExchange exchange) {
if (ts == null) { if (ts == null) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "需要传入时间戳参数"); throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "需要传入时间戳参数");
} }

4
epmet-gateway/src/main/java/com/epmet/auth/ExternalAuthProcessor.java

@ -61,9 +61,9 @@ public class ExternalAuthProcessor extends AuthProcessor {
// 没传authType或者传的jwt都用jwtprocessor处理 // 没传authType或者传的jwt都用jwtprocessor处理
try { try {
if (StringUtils.isBlank(authType) || APP_AUTH_TYPE_JWT.equals(authType)) { if (StringUtils.isBlank(authType) || APP_AUTH_TYPE_JWT.equals(authType)) {
jwtAuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null); jwtAuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null, exchange);
} else if (APP_AUTH_TYPE_MD5.equals(authType)) { } else if (APP_AUTH_TYPE_MD5.equals(authType)) {
md5AuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null); md5AuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null, exchange);
} else { } else {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "未知的认证类型"); throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "未知的认证类型");
} }

Loading…
Cancel
Save