Это моя весна Загрузочный 1.5.1 Привод application.properties
:Spring Пыльники привода Endpoints безопасности не работает с конфигурацией безопасности пользовательских Spring
#Spring Boot Actuator
management.contextPath: /actuator
management.security.roles=R_0
Это мой 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();
}
}
Сейчас я 'успешно удается войти в мое приложение с нужным пользователем, у которого есть R_0
, но когда я пытаюсь получить доступ, например,
http://localhost:8080/api/actuator/beans
я получаю следующее сообщение об ошибке:
There was an unexpected error (type=Forbidden, status=403).
Access is denied. User must have one of the these roles: R_0
Как правильно настроить Spring загрузки привода для того, чтобы быть в курсе о правильном Authentication
?
Сейчас для того, чтобы получить его, я работаю должен сделать следующий трюк:
management.security.enabled=false
.antMatchers("/actuator/health").permitAll()
.antMatchers("/actuator/**").hasAuthority("R_0")
ли шанс настроить привода в правильном направлении?
ОБНОВЛЕНО
Я использую UserDetailsService.UserDetails.Authorities
public Collection<? extends GrantedAuthority> getAuthorities() {
String[] authorities = permissions.stream().map(p -> {
return p.getName();
}).toArray(String[]::new);
return AuthorityUtils.createAuthorityList(authorities);
}
Спасибо, но я в состоянии справиться с этим с '.antMatchers ("/привод/* * "). hasAuthority (" R_0") '. Проблема в том, что я не могу работать с интеграцией по безопасности Spring Boot Act по умолчанию, не требуя создания настраиваемых конфигураций, подобных этой. – alexanoid
У меня такая же проблема. Замечено, что путем установки 'UserDetailsService' в' AuthenticationManagerBuilder' каким-то образом переопределяет конфигурацию безопасности по умолчанию, означающую необходимость в явной конфигурации доступа к URI, как вы это делали с помощью класса HttpSecurity. Вам удалось заставить его работать так, как вы ожидали? – RZet
Да, вы должны использовать префикс 'ROLE_' для вашего' management.security.roles', например 'management.security.roles = ROLE_SOMENAME' – alexanoid