Два адаптера WebSecurityConfigurer не работают вместе - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над продуктом SaaS.Безопасность продукта на основе jwt, работающего с токеном и все, все отлично работает.Теперь я хочу добавить интеграцию API gmail с OAuth2, и у меня возникла проблема / недоразумение, когда я добавил конфигурацию безопасности для OAuth2.(как оказалось, с одним WebSecurityConfigurerAdapter это невозможно сделать)

Мой первый WebSecurityConfigurerAdapter для jwt (обычная аутентификация / авторизация) выглядит примерно так:

  @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable().authorizeRequests()
                .antMatchers(HttpMethod.POST, "/user/save").permitAll()
                .antMatchers(HttpMethod.POST, "/company/add").permitAll()
                .antMatchers("/myapp/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .addFilter(getJWTAuthenticationFilter())
                .addFilter(getJWTAuthorizationFilter())
                .headers()
                .frameOptions().sameOrigin()
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

И новый WebSecurityConfigurerAdapter для Gmailis:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login/gmail")
                .authenticated()
                .anyRequest()
                .permitAll();
    }

Посмотрите на второй HttpSecurity, я делаю только один авторизованный URL для входа в Gmail.

Первый подход: Gmail HttpSecurity получает минимальное значение @Order и проверяет, является ли конечная точка / login / gmail вызовом аутентификации gmail, если нет, просто пропустите основную HttpSecurity на основеJWT.

Недостаток: это невозможно сделать.Если я сделаю в любой из двух конечных точек WebSecurityConfigurerAdapter allowAll (), то она будет пропущена всегда для обоих экземпляров.

Второй подход: второго подхода в моей голове нет.Я не знаю, как решить проблему.

---- ОБНОВЛЕНО ----

Я пытался игнорировать / login / gmail в конфигурации безопасности JWT, но это не помоглоПомогите.После первого фильтра он полностью пропускается и не попадает в конфигурацию Gmail.

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/login/gmail");
    }

Я включаю отладку @EnableWebSecurity, и это - трассировка стека:

Цепочка фильтров безопасности: [WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter HeaderWriterFilter CorsFilter
LogoutFilter OAuth2ClientAuthenticationProcessingFilter
RequestCacheAwareFilter SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter SessionManagementFilter
ExceptionTranslationFilter FilterSecurityInterceptor]

Это когда я ставлю низкий порядокдля gmail WebSecurityConfigurerAdapters.Если я поставлю высокий порядок, то jwt WebSecurityConfigurerAdapters он исчезнет из цепочки.

Короче говоря, он никогда не работает вместе.Это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...