Я работаю над продуктом 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 он исчезнет из цепочки.
Короче говоря, он никогда не работает вместе.Это правильно?