Как добавить фильтр после полной аутентификации OAuth2 в Spring Boot Security? - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь сделать что-то после входа в OAuth2 в SpringBoot.


, поэтому я пытаюсь добавить фильтр после OAuth2LoginAuthenticationFilter.

@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/login", "/oauth2/**", "/")
                    .permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .oauth2Login()
                    .and()
                .addFilterAfter(new MyFilter(), OAuth2LoginAuthenticationFilter.class)
                .logout();
    }


Но это называется три раза.вот так enter image description here



вот мой код.


SpringКласс конфигурации безопасности

@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/login", "/oauth2/**", "/")
                    .permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .oauth2Login()
                    .and()
                .addFilterAfter(new MyFilter(), OAuth2LoginAuthenticationFilter.class)
                .logout();
    }
}

Класс MyFilter

public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("login success.");
        chain.doFilter(request, response);
    }

}

Почему он вызывается три раза?и что мне делать?

Я хочу позвонить только один раз или получить любой другой хороший способ.

1 Ответ

0 голосов
/ 08 июля 2019

Большинство фильтров аутентификации Spring расширяют класс Springs OncePerRequestFilter, по этой самой причине.Вы можете использовать его, если хотите, чтобы фильтр выполнялся только один раз для каждого запроса.На вашей html-странице будут формы, javascript, изображения, поэтому, когда вы отправляете запрос, на самом деле имеется доступ к нескольким ресурсам, контроллеру и статическому контенту, изображениям, js и т. Д., Каждый доступ к ресурсу должен оцениваться отдельно.

...