Загрузите другой поставщик аутентификации для определенного URL - PullRequest
0 голосов
/ 24 октября 2018

Я хочу загрузить разные провайдеры аутентификации для разных URL.Например, если у меня есть URL, соответствующий «/ foo / что-то», тогда загрузите FooProvider, а для «bar / что-то» -> BarProvider.Проблема в том, что когда я нажимаю на ссылку "bar / что-то", параметр sessionScope (я передаю его в конструктор провайдера) по-прежнему "foo".Это означает, что FooProvider загружен, но это не то, что я ожидаю.Я что-то упускаю?Заранее спасибо.

 abstract class TokenAuthenticationProvider (
        protected val sessionScope: SessionScope
    ) : AuthenticationProvider { 

    private fun authenticateToken(authentication: TokenAuthentication): Authentication { 
        println("sessionScope $sessionScope")
    }
}

@Component
class FooAuthenticationProvider : TokenAuthenticationProvider (sessionScope = SessionScope.Foo)

@Component
class BarAuthenticationProvider : TokenAuthenticationProvider (sessionScope = SessionScope.Bar)


@Configuration
@EnableWebSecurity
class WebSecurityConfiguration @Autowired constructor(
    private val fooProvider: FooProvider,
    private val barProvider: BarProvider,
    private val authFilter: AuthFilter,
    private val corsFilter: CustomCorsFilter
) : WebSecurityConfigurerAdapter() {

    override fun configure(http: HttpSecurity) {

        ... 

        http.authorizeRequests()
            .antMatchers("foo/**")
            .fullyAuthenticated()
            .and()
            .authenticationProvider(fooProvider)

        http.authorizeRequests()
            .antMatchers("bar/**")
            .fullyAuthenticated()
            .and()
            .authenticationProvider(barProvider)

          ... 
    }

    override fun configure(auth: AuthenticationManagerBuilder) {
        auth.authenticationProvider(fooProvider)
        auth.authenticationProvider(barProvider)
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

Вам необходимо настроить два WebSecurityConfigurerAdapter и добавить antMatcher на верхнем уровне HttpSecurity.

@Configuration
@Order(1)
class FooWebSecurityConfiguration(val provider: FooProvider) : WebSecurityConfigurerAdapter() {

    override fun configure(http: HttpSecurity) {
        http.antMatcher("/foo/**")
            .authorizeRequests()
            .antMatchers("/foo/**")
            .fullyAuthenticated()
            .and()                
            .authenticationProvider(provider)
    }
}

@Configuration
@Order(2)
class BarWebSecurityConfiguration(val provider: BarProvider) : WebSecurityConfigurerAdapter() {

    override fun configure(http: HttpSecurity) {
        http.antMatcher("/bar/**")
            .authorizeRequests()
            .antMatchers("/bar/**")
            .fullyAuthenticated()              
            .and()
            .authenticationProvider(provider)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...