Das ist mein Frühling Stiefel 1.5.1 Antrieb ist application.properties
:Frühlings-Boot-Actuator Endpoints Sicherheit funktioniert nicht mit benutzerdefinierten Spring Security Configuration
#Spring Boot Actuator
management.contextPath: /actuator
management.security.roles=R_0
Das ist mein WebSecurityConfig
:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Value("${logout.success.url}")
private String logoutSuccessUrl;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.addFilterBefore(new CorsFilter(), ChannelProcessingFilter.class);
http
.csrf().ignoringAntMatchers("/v1.0/**", "/logout")
.and()
.authorizeRequests()
.antMatchers("/oauth/authorize").authenticated()
//Anyone can access the urls
.antMatchers("/signin/**").permitAll()
.antMatchers("/v1.0/**").permitAll()
.antMatchers("/auth/**").permitAll()
.antMatchers("/actuator/health").permitAll()
.antMatchers("/actuator/**").hasAuthority("R_0")
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.failureUrl("/login?error=true")
.usernameParameter("username")
.passwordParameter("password")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl(logoutSuccessUrl)
.permitAll();
// @formatter:on
}
/**
* Configures the authentication manager bean which processes authentication requests.
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
ich jetzt bin erfolgreich in der Lage, mich in meiner Anwendung mit einem richtigen Benutzer anmelden, die R_0
Berechtigungen hat, aber wenn ich versuche, zum Beispiel auf
Ich erhalte folgende Fehlermeldung:
There was an unexpected error (type=Forbidden, status=403).
Access is denied. User must have one of the these roles: R_0
Wie Sie sich richtig Frühling Boot-Aktor, um sich bewusst zu sein, über die richtige Authentication
konfigurieren?
Gerade jetzt, um es zu bekommen Workin ich die folgenden Trick zu tun haben:
management.security.enabled=false
.antMatchers("/actuator/health").permitAll()
.antMatchers("/actuator/**").hasAuthority("R_0")
irgendeine Chance Actuator in einem richtigen Weg zu konfigurieren?
AKTUALISIERT
Ich verwende UserDetailsService.UserDetails.Authorities
public Collection<? extends GrantedAuthority> getAuthorities() {
String[] authorities = permissions.stream().map(p -> {
return p.getName();
}).toArray(String[]::new);
return AuthorityUtils.createAuthorityList(authorities);
}
Dank dieses Problem zu lösen, aber ich bin in der Lage, dies zu verwalten mit '.antMatchers ("/Aktor/* * "). hasAuthority (" R_0 ")'. Das Problem ist, dass ich nicht in der Lage bin, die standardmäßige Spring Boot Actuator-Sicherheitsintegration zu verwenden, ohne dass eine benutzerdefinierte Konfiguration wie diese erstellt werden muss. – alexanoid
Ich habe das gleiche Problem. Beachten Sie, dass durch Setzen eines 'UserDetailsService' auf' AuthenticationManagerBuilder' die Standard-Sicherheitskonfiguration überschrieben wird, was bedeutet, dass eine explizite URI-Zugriffskonfiguration erforderlich ist, wie Sie es über die 'HttpSecurity'-Klasse getan haben. Haben Sie es geschafft, dass es so funktioniert, wie Sie es ursprünglich erwartet hatten? – RZet
Ja, müssen Sie Präfix 'ROLE_' für Ihre' management.security.roles' zum Beispiel verwenden 'management.security.roles = ROLE_SOMENAME' – alexanoid