我的rest应用程序使用以下securityconfig.configure方法配置了spring boot和springsecurity:
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
.requestMatchers(PUBLIC_URLS).permitAll()
.requestMatchers(ACTUATOR_URLS).hasRole("ADMIN")
.requestMatchers(PROTECTED_URLS).hasRole("ADMIN")
.and()
.cors().disable()
.csrf().disable()
.addFilterBefore(signaAuthenticationFilter, BasicAuthenticationFilter.class);
}
默认情况下,生成的响应标头将包括以下缓存控制标头:
[缓存控制:无缓存,无存储,最大年龄=0,必须重新验证]
根据此链接:https://www.baeldung.com/spring-security-cache-control-headers 我知道,对于这样一个请求,可以覆盖这种默认行为:
@GetMapping("/users/{name}") public ResponseEntity<UserDto> getUser(@PathVariable String name) { return ResponseEntity.ok() .cacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS)) .body(new UserDto(name)); }
问题:我想用“cache control:max age=86400”设置一个响应头
仅用于执行器/信息请求。这个请求嵌入了spring引导执行器,我不能修改代码,必须更改securityconfig.configure()方法。但我尝试的每一个改变都会导致一些不良的副作用。我在前面的代码中尝试了以下加载项:
http.requestMatcher(new AntPathRequestMatcher(ACTUATOR_INFO)).headers().cacheControl().disable()
.addHeaderWriter(new StaticHeadersWriter(HttpHeaders.CACHE_CONTROL, "max-age=60"));
.and()
.requestMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher(ACTUATOR_INFO))).headers().cacheControl();
这个 addHeaderWriter
不足以更改默认缓存控件,因此我需要添加 cacheControl().disable()
对于我要在缓存中保留数据的url(actuator/info)。但通常这会禁用所有uri的缓存。所以我需要加上 NegatedRequestMatcher
. 但这会导致执行器/信息的缓存失效。
还有:我还丢失了其他一些默认的安全头,比如:x-frame-options:deny或x-xss-protection:1;模式=块
那么,我如何保留实际的securityconfig.configure()方法(默认无缓存)等,并允许发送带有“cache control:max age=86400”的响应头,以便让浏览器客户端在其缓存中保留…/actuator/info?
暂无答案!
目前还没有任何答案,快来回答吧!