| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -7,7 +7,10 @@ import com.epmet.auth.InternalAuthProcessor; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.constant.AppClientConstant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.constant.Constant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.exception.EpmetErrorCode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.exception.RenException; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.utils.Result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.constant.AuthTypeConstant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.constant.TokenHeaderKeyConstant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import org.apache.commons.lang3.StringUtils; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import org.slf4j.Logger; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import org.slf4j.LoggerFactory; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -40,16 +43,6 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						private Logger logger = LoggerFactory.getLogger(getClass()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						private final AntPathMatcher antPathMatcher = new AntPathMatcher(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						public static final String AUTH_TYPE_INTERNAL = "internal"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						public static final String AUTH_TYPE_EXTERNAL = "external"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						public static final String AUTH_TYPE_NO_NEED = "no_need"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						public static final String AUTH_TYPE_UNKNOW = "unknow"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						@Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						private CpProperty cpProperty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						@Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						private InternalAuthProcessor internalAuthProcessor; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -79,16 +72,17 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								String authType = getAuthType(request); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									switch (authType) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									case AUTH_TYPE_EXTERNAL: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										case AuthTypeConstant.AUTH_TYPE_EXTERNAL: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											return externalAuthProcessor.auth(exchange, chain); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									case AUTH_TYPE_INTERNAL: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										case AuthTypeConstant.AUTH_TYPE_INTERNAL: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											return internalAuthProcessor.auth(exchange, chain); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									case AUTH_TYPE_NO_NEED: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										return response(exchange, new Result<>().error(EpmetErrorCode.ERR401.getCode(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												EpmetErrorCode.ERR401.getMsg())); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} catch (RenException e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									return response(exchange, new Result<>().error(e.getCode(), e.getMessage())); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} catch (Exception e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									return response(exchange, new Result<>().error(e.getMessage())); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return chain.filter(exchange); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -100,40 +94,23 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						 * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						private String getAuthType(ServerHttpRequest request) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							String requestUri = request.getPath().pathWithinApplication().value(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							boolean existsInInternal = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							boolean existsInExternal = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//String requestUri = request.getPath().pathWithinApplication().value();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for (String url : cpProperty.getInternalAuthUrls()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if (antPathMatcher.match(url, requestUri)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									existsInInternal = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for (String url : cpProperty.getExternalAuthUrls()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if (antPathMatcher.match(url, requestUri)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									existsInExternal = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (!existsInInternal && !existsInExternal) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								// 既不再内部认证url,也不在外部认证url,那么不需要认证
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return AUTH_TYPE_NO_NEED; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							// 内部认证
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (StringUtils.isNotBlank(getHeader(request, Constant.AUTHORIZATION_HEADER)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									&& existsInInternal) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return AUTH_TYPE_INTERNAL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							// 是否在外部认证列表中(外部认证列表中的url,是对外部应用开放的,只有在这个列表中的url才对外部应用开放)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//boolean inExtAuthPaths = false;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//for (String url : cpProperty.getExternalAuthUrls()) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//	if (antPathMatcher.match(url, requestUri)) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//		inExtAuthPaths = true;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//	}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							//}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (StringUtils.isNotBlank(getHeader(request, Constant.ACCESS_TOKEN_HEADER)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									&& existsInExternal) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return AUTH_TYPE_EXTERNAL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.ACCESS_TOKEN_HEADER_KEY))) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								// url对外部应用开放,并且头里面有AccessToken,那么走外部应用认证
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return AuthTypeConstant.AUTH_TYPE_EXTERNAL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return AUTH_TYPE_UNKNOW; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return AuthTypeConstant.AUTH_TYPE_INTERNAL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/** | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |