如何在 Spring Boot 中禁用或覆盖 RequestCacheAwareFilter
Posted
技术标签:
【中文标题】如何在 Spring Boot 中禁用或覆盖 RequestCacheAwareFilter【英文标题】:How to disable or override RequestCacheAwareFilter in Spring Boot 【发布时间】:2016-02-07 16:26:57 【问题描述】:-
我有非常基本的简单 Spring Boot Rest 应用程序。
我需要在 Spring Security 中实现自定义身份验证:对于每个 REST 请求,我需要检查每个请求的特定标头中的用户名和密码(“用户名”和“密码”)。
所以我实现了自定义 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"));
所以,我意识到,RequestCacheAwareFilter 正在缓存第一个请求,并且标头也存储在缓存中。因此,如果我以错误的方式提出请求,然后以正确的方式提出请求,我仍然会收到异常。
那么,我该如何覆盖或禁用 CacheAwareFilter?还是我做错了什么?
【问题讨论】:
我刚刚将应用设置为无状态,如下所示:***.com/questions/2504590/… 现在一切正常。 【参考方案1】:使用自定义 WebSecurityConfigurerAdapter 将请求缓存设置为 NullRequestCache:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.requestCache()
.requestCache(new NullRequestCache());
【讨论】:
可以更快地完成(使用 Spring Security 5.2.1):http.requestCache().disable()
【参考方案2】:
我只是像这里一样使应用程序无状态:How can I use Spring Security without sessions?
现在一切都好了。
【讨论】:
以上是关于如何在 Spring Boot 中禁用或覆盖 RequestCacheAwareFilter的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中禁用 Tomcat 的 permessage-deflate WebSocket 压缩?
Spring Boot - 如何通过实现 BeforeAllCallback 的自定义扩展类设置或覆盖 application.yml 中定义的属性?
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
如何在 Spring-Boot 2 中禁用安全性? [复制]