Spring-Boot-Antrieb die Gesundheit Endpunkt nicht erreichbar, nach dem Upgrade auf Boot-1.2
Ich habe Probleme beim Upgrade von Spring Boot vom 1.1.12 bis 1.2.5, aber habe das gleiche Problem in allen Versionen von 1.2.x. Die /health
Endpunkt zur Verfügung gestellt von Aktor ist nun die Rückkehr 401 Unauthorized zu einer integration test, der verwendet wird, um zu arbeiten. Kein code geändert hat, während die Aktualisierung der Abhängigkeit.
Hier ist der test-Fall:
@Test
public void testNoUserForStatusEndpoint() throws Exception {
HttpEntity<String> entity = new HttpEntity<>(null, headers);
ResponseEntity<String> response = template
.exchange(base + "/health", HttpMethod.GET, entity, String.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals("{\"status\":\"UP\"}", response.getBody());
}
Ich erwarte, um zu sehen, die grundlegende "UP"
status, aber keine weiteren details, wie der Benutzer ist anonym und nicht authentifiziert.
Einstellung management.security.enabled=false
in der Anwendung.Eigenschaften bewirkt, dass der Endpunkt zur Rückgabe der vollständigen information über die Gesundheit. Dies ist nicht wünschenswert.
Einstellung endpoints.health.sensitive=false
nichts.
Die Sicherheits-Konfiguration hat sich nicht geändert. Es basiert auf Apache Kündigung und eine Bescheinigung whitelist, die auch nicht geändert hat.
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.addFilterBefore(new CustomAuthenticationFilter(authenticationManager(), Environment.getUserWhitelist()), BasicAuthenticationFilter.class);
}
Wie kann ich das test-Abo?
Updates:
Ursprünglich die einzige relevante Einstellung in application.properties
definiert wurde, ist endpoints.health.enabled=true
.
Hinzufügen management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN
zu application.properties
macht keinen Unterschied.
Mit allen drei Eigenschaften die Ergebnisse in einem 401 (funktioniert nicht):
endpoints.health.enabled=true
endpoints.health.sensitive=false
management.health.status.order=UP,DOWN,OUT_OF_SERVICE,UNKNOWN
Main-Klasse ist nur eine abgespeckte Spring-Boot-Anwendung launcher:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Habe ich versucht, indem http.authorizeRequests().antMatchers("/health**").permitAll();
auf die erste Zeile des Sicherheitskonfigurations-Methode (siehe oben). Es nicht einen Unterschied machen.
Nach Spring Boot Problem 2120, Die endpoints.health.sensitive
- Eigenschaft wird ignoriert, wenn die benutzerdefinierte Sicherheit. Ich fand es keine Erwähnung von diesem in der Dokumentation.
- Ähnlich wie diese Frage, aber die Sicherheits-details sind anders.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oder fügen Sie
management.security.enabled=false
auf die Anwendung.Eigenschaften
Ich eine Lösung gefunden habe.
Hinzufügen
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
zu meiner benutzerdefinierten Authentifizierung-filter (bezeichnet alsCustomAuthenticationFilter
in der Frage) änderungen der Semantik von der Definition einer security-filter bean.Ohne die Anmerkung, Spring Boot übernimmt, möchte ich überschreiben, alle Filter und benutzen Sie einfach meine benutzerdefinierte filter isoliert.
Mit der Anmerkung, Spring Boot, fügt mein filter, um die Liste der vordefinierten Filter. Dies ermöglicht es der
/health
Endpunkt wieder zu arbeiten.Sehen Spring Boot-Problem 2120 auf GitHub für details.
javax.servlet.Filter
- Instanz für die Authentifizierung verwendet. Ich bin mit einer eigenen Klasse für diese.Pls versuchen, diese auf die Anwendung.Eigenschaften oder Anwendung.yml :-
War ich immer 404-Fehler mit /Gesundheits-url. Aber seine arbeitete mit /Aktor - /Gesundheits-url statt /Gesundheit.