Ich habe Spring Security auf meinem Klassenpfad (und verifiziert, dass ich für meine eigenen REST-Controller arbeite), aber meine Actuator-Endpunkte sind standardmäßig alle öffentlich verfügbar (außer /shutdown
).Warum sind alle Endpunkte des Spring-Boot-Aktuators öffentlich verfügbar?
Ich kann Endpunkte wie ich bitte (nach dem Lesen durch this Frage) deaktivieren, aber aktiviert sind immer ohne Authentifizierung und ohne die Rolle von management.security.role
in meinen Eigenschaften erforderlich.
Auch wenn ich zum Beispiel endpoints.beans.sensitive=true
explizit setze, ist es immer noch ohne Authentifizierung zugänglich.
My Security-Konfiguration, die LDAP zur Authentifizierung verwendet:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private LdapContextSource contextSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.contextSource(contextSource)
.groupRoleAttribute("<hidden>")
.groupSearchBase("<hidden>")
.groupSearchFilter("<hidden>")
.userDnPatterns("<hidden>");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic();
}
}
Mein application.properties während dieses Tests:
# Log4J properties
logging.file=${user.home}/nubis-log.log
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.register-shutdown-hook=true
# SSL configuration
server.ssl.key-store=<hidden>
server.ssl.key-store-password=<hidden>
server.ssl.keyStoreType=<hidden>
server.ssl.key-password=<hidden>
# Spring actuator
endpoints.enabled=false
endpoints.info.enabled=true
endpoints.health.enabled=true
endpoints.beans.enabled=true
endpoints.beans.sensitive=true
management.security.role=ADMIN
Meine Konsolenausgabe:
[2016-04-15 12:30:05.742] boot - 2754 INFO [localhost-startStop-1] --- DelegatingFilterProxyRegistrationBean: Mapping filter: 'springSecurityFilterChain' to: [/*]
[2016-04-15 12:30:05.742] boot - 2754 INFO [localhost-startStop-1] --- FilterRegistrationBean: Mapping filter: 'webRequestLoggingFilter' to: [/*]
[2016-04-15 12:30:05.743] boot - 2754 INFO [localhost-startStop-1] --- FilterRegistrationBean: Mapping filter: 'CORSFilter' to: [/*]
[2016-04-15 12:30:05.743] boot - 2754 INFO [localhost-startStop-1] --- FilterRegistrationBean: Mapping filter: 'applicationContextIdFilter' to: [/*]
[2016-04-15 12:30:05.743] boot - 2754 INFO [localhost-startStop-1] --- ServletRegistrationBean: Mapping servlet: 'dispatcherServlet' to [/]
[2016-04-15 12:30:05.800] boot - 2754 DEBUG [localhost-startStop-1] --- DelegatingFilterProxy: Initializing filter 'springSecurityFilterChain'
[2016-04-15 12:30:07.059] boot - 2754 INFO [localhost-startStop-1] --- EndpointHandlerMapping: Mapped "{[/info || /info.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[2016-04-15 12:30:07.061] boot - 2754 INFO [localhost-startStop-1] --- EndpointHandlerMapping: Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[2016-04-15 12:30:07.063] boot - 2754 INFO [localhost-startStop-1] --- EndpointHandlerMapping: Mapped "{[/health || /health.json],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(java.security.Principal)
Könnte es sein, Konfiguration/Eigenschaft Blockierung Spring Security irgendwo? Muss ich etwas extra konfigurieren, damit es mit LDAP funktioniert?
Sie wahrscheinlich sind Fehlkonfiguration Spring Security? Versuchen Sie 'http.authorizeRequests(). AnyRequest(). Authenticated(). Und(). FormLogin(). Und(). HttpBasic();'. http://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#jc-httpsecurity –
@XtremeBiker Dies funktioniert, aber ich möchte nicht, dass alle Anfragen authentifiziert werden. Aus diesem Grund verwende ich '@ EnableGlobalMethodSecurity'. Oder verwende ich es falsch? – delucasvb
Sie konfigurieren die Sicherheit selbst, daher hat die Sicherheitskonfiguration in der 'application.properties' keine Auswirkungen. Sie überschreiben es im Grunde selbst, und da Sie nichts geschützt haben, ist alles zugänglich. –