访问 Spring 引导 Zuul 服务路由的身份验证
Authentication to access Spring boot Zuul Service routes
我已经使用 Spring 启动 zuul 和 eureka 服务配置了我的微服务。
现在我需要验证所有 routes/REST API 调用。
我的意思是,为所有 API 的客户端发送一个 accessToken。
在 zuul 服务上,在路由到特定服务之前,我必须使用 accessToken 调用微服务(auth-service),并且 auth-service 将检查用户是否存在以获取发送的 accessToken。
如果 accessToken 有效,则只应进行路由。
请帮助我使用 spring 启动服务来实现这个。
谢谢。
你需要写一个过滤器。你需要一个 zuul pre 过滤器。您可以在过滤器中访问您的身份验证服务器,如果令牌无效,您不会立即调用您的微服务和 return 响应。如果它是有效的,你让请求进入微服务。
过滤器示例 class:
public class AuthFilter extends ZuulFilter {
@Autowired
RestTemplate restTemplate;
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
//get your token from request context and send it to auth service via rest template
boolean validToken = restTemplate.exchange(or getForObject or other methods of restTemplate which you find suitable for method and return type of your auth service controller method)
if(!validToken) {
ctx.setSendZuulResponse(false); //This makes request not forwarding to micro services
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
ValidationResponse validationResponse = new ValidationResponse();
validationResponse.setSuccess(false);
validationResponse.setMessage("Invalid Access...");
ObjectMapper mapper = new ObjectMapper();
String responseBody = mapper.writeValueAsString(validationResponse);
ctx.setResponseBody(validationResponse);
ctx.getResponse().setContentType("application/json");
//If you want to do any thing else like logging etc, you can do it.
}
return null;
}
}
我已经使用 Spring 启动 zuul 和 eureka 服务配置了我的微服务。 现在我需要验证所有 routes/REST API 调用。 我的意思是,为所有 API 的客户端发送一个 accessToken。 在 zuul 服务上,在路由到特定服务之前,我必须使用 accessToken 调用微服务(auth-service),并且 auth-service 将检查用户是否存在以获取发送的 accessToken。 如果 accessToken 有效,则只应进行路由。
请帮助我使用 spring 启动服务来实现这个。
谢谢。
你需要写一个过滤器。你需要一个 zuul pre 过滤器。您可以在过滤器中访问您的身份验证服务器,如果令牌无效,您不会立即调用您的微服务和 return 响应。如果它是有效的,你让请求进入微服务。
过滤器示例 class:
public class AuthFilter extends ZuulFilter {
@Autowired
RestTemplate restTemplate;
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
//get your token from request context and send it to auth service via rest template
boolean validToken = restTemplate.exchange(or getForObject or other methods of restTemplate which you find suitable for method and return type of your auth service controller method)
if(!validToken) {
ctx.setSendZuulResponse(false); //This makes request not forwarding to micro services
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
ValidationResponse validationResponse = new ValidationResponse();
validationResponse.setSuccess(false);
validationResponse.setMessage("Invalid Access...");
ObjectMapper mapper = new ObjectMapper();
String responseBody = mapper.writeValueAsString(validationResponse);
ctx.setResponseBody(validationResponse);
ctx.getResponse().setContentType("application/json");
//If you want to do any thing else like logging etc, you can do it.
}
return null;
}
}