我正在尝试在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();
}
这是我的代码。
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);
}
}
为什么叫三遍?该怎么办?
我只想被叫一次或获得其他好方法。
答案 0 :(得分:0)
出于这个原因,大多数Spring身份验证过滤器扩展了Springs OncePerRequestFilter类。如果您只希望过滤器对每个请求执行一次,则可以考虑使用它。 您的html页面将包含表单,javascript,图像,因此在您提交请求时,实际上有许多资源正在被访问,控制器以及静态内容,图像,js等,访问的每个资源都需要分别进行评估。>