如何在Spring Boot中禁用或覆盖RequestCacheAwareFilter

时间:2015-11-06 13:44:27

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

  1. 我有一个非常简单的Spring Boot Rest应用程序。
  2. 我需要在Spring Security中实现自定义身份验证:对于每个REST请求,我需要检查用户名和密码,这些请求位于每个请求的特定标头中(“用户名”和“密码”)。

  3. 所以我实现了自定义AuthEntryPoint:

     @Service
    public class CustomAuthEntryPoint implements AuthenticationEntryPoint {
        @Override
        public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
            String username = httpServletRequest.getHeader("username");
            String password = httpServletRequest.getHeader("password");
            if (!username.equals("admin") || !password.equals("admin")) {
                throw new RuntimeException("", new BadCredentialsException("Wrong password"));
            }
        }
    }
  4. 因此,我意识到,RequestCacheAwareFilter正在缓存第一个请求,并且标头也存储在缓存中。因此,如果我使用错误的传递请求,然后使用正确的传递,我仍然会得到例外。

  5. 那么,我怎么能覆盖CacheAwareFilter或禁用它?或者我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用自定义WebSecurityConfigurerAdapter将请求缓存设置为NullRequestCache:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestCache()
            .requestCache(new NullRequestCache());
    }
}

答案 1 :(得分:0)

我刚刚让app变为无状态:How can I use Spring Security without sessions?

现在一切都还好。