У меня есть 2 класса, которые расширяют WebSecurityConfigurerAdapter
. И не могут заставить их работать вместе.
Идея такова:
- Есть один
WebSecurityConfigurerAdapter
, который добавляет специальный фильтр в цепочку безопасности. Фильтр выполняет некоторую пользовательскую аутентификацию и сохраняетAuthentication
вSecurityContext
. Это нормально работает. Конфигурируется следующим образом (импорт пропущен):
@Order(1)
@Configuration
@EnableWebMvcSecurity
public class BestSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private BestPreAuthenticationFilter ssoAuthenticationFilter;
@Bean
protected FilterRegistrationBean getSSOAuthenticationFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(ssoAuthenticationFilter);
// Avoid include to the default chain
filterRegistrationBean.setEnabled(false);
return filterRegistrationBean;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterAfter(ssoAuthenticationFilter, SecurityContextPersistenceFilter.class);
}
@Configuration
protected static class AuthenticationConfiguration extends
GlobalAuthenticationConfigurerAdapter {
@Autowired
private BestAuthenticationProvider authenticationProvider;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}
}
}
- Я хочу, чтобы вышеуказанное было своего рода классом библиотеки, который любой может включать через
@ComponentScan
, и получить упорядоченную проверку подлинности. Очевидно, что они хотят предоставить пользовательскийHttpSecurity
для защиты информационных точек. Попробуйте что-то вроде:
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/testUrl").hasRole("NON_EXISTING")
.anyRequest().authenticated();
}
}
Очевидно, что тестовый URL-адрес не должен быть доступен, так как мой пользователь не является членом роли NON_EXISTING
. К несчастью, она.
Если я переведу часть безопасности authorizeRequests()
в форму класса конфигурации 1. рядом с добавлением фильтра безопасности, он блокирует доступ, как ожидалось. Но в моем случае это выглядит как вторая конфигурация игнорируется.
Я также отлаживал методы configure()
и заметил, что HttpSecurity
- это не тот же объект, который немного пахнет.
Любые советы, как я могу сделать эту работу высоко оцененной.
Подведите итог цели:
- имеет один
WebSecurityConfigurerAdapter
, который добавляет фильтр и скрыт от пользователя библиотеки - позволяет пользователю определить собственную пользовательскую безопасность конечных точек.
Spring boot 1.1.6-RELEASE