在Spring Boot Security中完成OAuth2身份验证后,如何添加过滤器?

时间:2019-07-07 05:35:10

标签: spring spring-boot oauth spring-security-oauth2

我正在尝试在SpringBoot中登录OAuth2之后执行某些操作。


所以我想在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 :(得分:0)

出于这个原因,大多数Spring身份验证过滤器扩展了Springs OncePerRequestFilter类。如果您只希望过滤器对每个请求执行一次,则可以考虑使用它。 您的html页面将包含表单,javascript,图像,因此在您提交请求时,实际上有许多资源正在被访问,控制器以及静态内容,图像,js等,访问的每个资源都需要分别进行评估。