如何在Spring Boot {O 44]中的Oauth2过滤器之前添加速率限制过滤器

时间:2018-02-04 00:23:38

标签: spring spring-mvc spring-boot spring-security

我有一个使用OAuth2进行身份验证的Spring启动应用程序。我们需要对登录尝试进行速率限制,端点为/oauth/token

我无法在此过滤器前面找到过滤器,但无法进行过滤。

我已尝试在WebSecurityConfigurerAdapter中的BasicAuthenticationFilter之前注册过滤器。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(final HttpSecurity http) throws Exception {
    http.addFilterBefore(filter, BasicAuthenticationFilter.class);
}

我还尝试在普通过滤器链中添加此过滤器,其顺序为Integer.MIN_VALUE,其中安全上下文通过application.properties设置了一个带有属性security.filter-order=5的顺序。

这些都没有奏效。

是否有#34;春天"添加api速率限制的方法?如果是通过过滤器,是否有办法让过滤器在BasicAuthenticationFilter或其他安全过滤器之前处于活动状态?

1 个答案:

答案 0 :(得分:2)

创建一个实现Filter的新@Component类,并为其提供一个HIGHO_PRECEDENCE的@Order。以下示例:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class PreSecurityFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) {

        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        if (RATE_LIMIT_EXCEEDED) {
            // Return suitable response message
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        } else {            
                // Only valid requests is allowed through the filter
                fc.doFilter(request, response);            
        }

    }
}