我有一个使用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
或其他安全过滤器之前处于活动状态?
答案 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);
}
}
}