我终于找到了解决这个问题的方法,所以我将简要分享一下:
所以我们有多种身份验证方式,在扩展AbstractPreAuthenticatedProcessingFilter 的几个类中进行了描述。 (所有这些都不会添加到过滤器链中)
最重要的是我们得到了一个MultiAuthModeSecurityFilter,这个类将被添加到应用程序的过滤器链中:
在WebSecurityConfigurerAdapter的configure方法内
http.addFilterBefore(new MultiAuthModeSecurityFilter(
FirstSecurityFilter(),
SecondSecurityFilter(),
ThirdSecurityFilter()), RequestCacheAwareFilter.class);
所以MultiAuthModeSecurityFilter 知道我们所有的安全策略,并将通过以下操作将请求分派到正确的过滤器:
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
/*some actions to define the right authMethod to use*/
switch (authMethod) {
case FIRST:
firstFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
case SECOND:
secondFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
case THIRD:
thirdFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
default:
/* throws exception */ break;
}
}
希望对你有帮助!