Wenn ich zuul Routen in bootstrap.properties, mein TestHandlerInterceptor definiert in gareway Anwendung so konfigurieren, ist nicht für alle Anforderung aufgerufen zu werden passende /Anmeldungen aber es wird gefordert alle anderen Anfrage TestHandlerInterceptor.preHandle erfolgreichInterceptor nicht genannt wurden, wenn zuul.routes in Gateway konfiguriert
bootstrap.properties verarbeitet zu werden
zuul.routes.registration-service.path=**registrations**
zuul.routes.registration-service.service=registration-service
TestHandlerInterce ptor.java
public class TestHandlerInterceptor implements HandlerInterceptor {
@Autowired
AuthenticationService authenticationService;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println(" ********* preHandle ********");
boolean result = true;
if(!authenticationService.isAuthenticated(httpServletRequest)){
result = false;
httpServletResponse.setStatus(401);
}
return result;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
GatewayApplication.java
@EnableZuulProxy
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication{
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public WebMvcConfigurerAdapter adapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestHandlerInterceptor());
super.addInterceptors(registry);
}
};
}
}
@RestController
class Orchestration {
@LoadBalanced
@Autowired
private RestTemplate restTemplate ;
@RequestMapping("/api/test")
public @ResponseBody
Collection<Registration> getRegistrations(){
ResponseEntity<Resources<Client>> resourceResponseEntity = this.restTemplate.exchange("http://registration-service/registrations", HttpMethod.GET,null, ptr);
}
}
Die TestHandlerInterceptor.preHandle führt für localhost: 1122/api/Test, aber es ist nicht für localhost genannt zu werden: 1122/Anmeldungen
Ich bin Ich versuche, einen AuthenticationService in meinem Interceptor hinzuzufügen, der die gesamte statusfreie Authentifizierung (unter Verwendung von API-Schlüsseln) durchführt, bevor eine der Unterressourcen angefordert wird.
versuchte ich ZuulFilter Umsetzung und die MyZuulFilter.run() ist Aufruf für alle localhost: 1122/Anmeldungen verlangen, aber nicht für localhost: 1122/api/test
Wie kann ich die Abfangjäger in so konfigurieren, dass seine bekommt, bevor irgendetwas anderes
pom.xml
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Angel.SR6</version>
</parent>
Dank Ravi
Hinzufügen addPathPatterns („/ **“) nicht gab erwartetes Ergebnis .. kann ich etwas falsch – Ravi
die Antwort aktualisiert tue vielleicht müssen Sie den Pfad Muster ändern. Können Sie den Registrierungsdienst über Zuul erreichen? –
Bereits zuul.routes.registration-service.path = ** Registrierungen ** zuul.routes.registration-service.service = Registrierungs-Service im Bootstrap. Ich kann den Dienst über Zuul starten, aber mein Interceptor wird nicht angerufen. Vorläufig habe ich meinen Code für die Authentifizierung (mit API-Schlüsseln) in ZuulFilter.run() wiederholt. Jetzt existiert der Code an zwei Stellen Filter und Interceptor, die ich zu vermeiden versuche – Ravi