Я использую пружинную загрузку 2.1.4 с зависимостями привода.Я хотел настроить отдельные механизмы аутентификации и авторизации для привода и моего приложения.Я прочитал Множественный HttpSecurity и настроил свой WebSecurityAdapter следующим образом:
@Configuration
public class ProvisioningServiceSecurityConfiguration {
@Value("${actuator.user.name}")
private String actuatorUserName;
@Value("${actuator.password}")
private String actuatorPassword;
@Value("${actuator.role}")
private String actuatorRole;
@Bean
public UserDetailsService userDetailsService() throws Exception {
// ensure the passwords are encoded properly
UserBuilder users = User.withDefaultPasswordEncoder();
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(users.username("user").password("password").roles("ADMIN").build());
manager.createUser(
users.username(actuatorUserName).password(actuatorPassword).roles(actuatorRole).build());
return manager;
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/locations/**")
.antMatcher("/organizations/**")
.antMatcher("/productTypes/**")
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration
@Order(2)
public static class ActuatorWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/manage/**")
.authorizeRequests()
.anyRequest().hasRole("ACTUATOR_ADMIN")
.and()
.httpBasic();
}
}
/*@Configuration
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}*/
}
Примечание: я временно отключил форму входа в систему
Когда я запускаю запрос скручивания
curl -XGET http://localhost:9797/provisioningService/organizations/all
Я могу видеть вывод.Как будто весенней безопасности никогда не существовало.Когда я включаю форму входа в систему, я получаю весенний экран входа в систему.Другое поведение, которое я наблюдал, заключается в том, что если я поменяю имя пользователя и пароль / местоположения на имя пользователя и пароль привода, я все равно получу верный ответ.
Я понимаю, что форма входа в систему является скорее запасным вариантом, но я хочу отключить форму входа в систему (возможно, мы можем перейти на cas) и использовать аутентификацию и авторизацию только на основе весенней безопасности httpBasic.Я не могу понять ошибку, которую я делаю.
Мое требование наконец-то:
1) запрос к / организациям / / местам и т. Д. Должен быть доступен только в том случае, если в качестве имени пользователя используется пароль «user» и «password»
2) запрос / управление, которое является API-интерфейсом привода, должен быть доступен только в том случае, если имя пользователя, пароль и роль совпадают с именем пользователя и паролем привода.
3) Может быть разрешен любой другой API. Все / форма логина
Как мне добиться этого?