1

Ich reformiere ein altes Java-Springprojekt in Springboot und stelle es in einen traditionellen Kriegsstil um. Aus irgendeinem Grund muss ich bei der traditionellen web.xml bleiben, um die Anwendung zu starten. Dank Springbook Legacy, kann ich dies mit einer web.xml erreichen:Springboot-Aktuator gibt 401 für Aktuator-Endpunkte zurück

Zusätzlich füge ich Springboot Aktuatorabhängigkeit hinzu. Die application.properties ist wie folgt:

endpoints.enabled=true 
endpoints.sensitive=true 
management.security.enabled=true 
management.context-path=/manage 
security.user.password=myserver 
security.user.name=myserver 

Die Anwendung kann normal gestartet, aber wenn ich versuche Endpunkte von Browser zu besuchen es gibt nur einen 401 Full authentication is required to access this resource Fehler ohne mich zu fragen in Benutzername und Kennwort einzugeben. Verwandte Protokolle sind unter:

16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: DispatcherServlet with name 'myservlet' processing GET request for [/manage/health] 
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping: Looking up handler method for path /manage/health 
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping: Returning handler method [public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal)] 
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: Last-Modified value for [/manage/health] is: -1 
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.core.env.PropertySourcesPropertyResolver: Found key 'endpoints.sensitive' in [applicationConfig: [classpath:../conf/application.properties]] with type [String] 
16:00:04.265 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: Successfully completed request 

Was könnte der Grund für dieses Problem sein? Gibt es einen Unterschied zwischen einem von Springboot erstellten DispatherServlet und einem explizit in einer web.xml definierten? Aus Sicherheitsgründen ist eine Notwendigkeit.

Antwort

1

Sehen Sie diesen Teil des Frühlings-Boot-Handbuch:

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html

speziell in diesem Abschnitt:

48,1 Zugriff auf sensible Endpunkte

Durch Endpunkte als empfindliche Markierung, können Sie nicht sehen sie, es sei denn, Sie sind mit einer entsprechenden Rolle angemeldet. Daher müssen Sie Spring Security für Ihre sensiblen Endpunkte einrichten.

Es gibt einen guten Blog-Eintrag hier auf, wie das zu tun:

http://www.devglan.com/spring-security/securing-spring-boot-actuator-endpoints-with-spring-security

+0

Dank Paul, aber ich frage mich, gibt es einige tiefere Gründe für dieses Problem sind. Als Vergleich verwende ich einen Servlet 3.0-Stil, um dieses Projekt neu zu gestalten, dh schreibe eine Klasse, die von SpringbootServletInitializer ausgeht, die von einem Webcontainer, der Servlet 3.0 unterstützt, automatisch erkannt wird und diese Klasse benutzt, um die Anwendung zu konfigurieren und andere Arbeiten zu belassen getan durch Springboot, wie das Einspritzen eines DispatcherServlet. Auf diese Weise können die Endpunkte bei unveränderter Anwendung "application.properties" aufgerufen werden, nachdem die Authentifizierungsinformationen eingegeben wurden. Ich kann nicht sagen, warum es nicht funktioniert, wenn web.xml benutzt wird. – xiangyq000

+0

Nicht sicher in diesem Punkt. Vielleicht einfach web.xml wie hier erklärt: http://www.baeldung.com/spring-xml-vs-java-config – PaulNUK

Verwandte Themen