7

Bahar çizme Zuul Servis yolları erişmek için. Artık tüm rotaları/REST API çağrılarını doğrulamam gerekiyor. Yani, tüm API'lar istemcisi için bir accessToken gönder. Zuul hizmetinde , özellikle hizmete yönlendirmeden önce, ben accessToken gönderilen kullanıcı var veya yok kontrol edecektir accessToken ile mikro servis (auth-hizmeti) ve bu yetki-servisini aramak zorunda. accessToken geçerliyse, yalnızca yönlendirme gerçekleşmelidir.Kimlik Ben Bahar çizme Zuul ve eureka hizmetlerini kullanarak benim mikro hizmetlerini yapılandırmış

bu kullanarak yay çizme hizmetini uygulamak için bana yardım edin.

Teşekkürler.

+0

imzalı güvenebileceğiniz belirteci sizin accessToken değil mi? –

+0

Yay güvenliği bunu doğru şekilde yapmanın yoludur. Arayan kişinin proxy'nizi dolaşmasına ve doğrudan mikro havzaya girmesinin bir yolu olmadığının farkında olmanız durumunda bunu yapmalısınız. –

+0

@Andy Brown, ayrıntılı bilgi verebilir misiniz? – Krish

cevap

3

Sen süzgeçten geçirilmesi gerekir. Bir zuul öncesi filtresi ihtiyacınız olan şeydir. Filtrenizdeki yetkili sunucunuza erişebilir ve belirteç geçersizse, mikro servisinizi aramaz ve hemen bir yanıt vermezsiniz. Geçerliyse, isteğin mikro hizmetlere gitmesine izin verirsin.

örneği filtre sınıfı:

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; 
    } 

} 
+0

Yanıtınız için teşekkür ederiz. Yanıtı dize olarak ayarlayabilirim. ctx.setResponseBody ("Geçersiz Erişim ...!"); Ben ValidationResponse gibi özel nesne olarak Tepki Vücut ayarlamanız gerekir. ValidationResponse, tüm hizmetler için benzersiz yanıt neslimdir. Aşağıdaki gibi şey: validationResponse.setSuccess (false); validationResponse.setMessage ("Geçersiz Erişim ..."); Ve sonra bu validationResponse yanıt nesnesi olarak ayarlayın. Bu konuda yardımcı olabilir misiniz? – Krish

+0

@Krishna, Sorun değil, yalnızca requestContext yanıtı ayarlamalısınız. Cevabı güncelledim. (İçerik türünü json olarak ayarlıyorum. Eğer xml kullanıyorsanız, içerik türünü buna göre ayarlayabilirsiniz) – barbakini

+0

Hayır, com.netflix.zuul.context.RequestContext.setResponseBody() sadece String veri tipini destekliyor. – Krish

İlgili konular