如何使用spring java config设置值为allow-from的X-Frame-Options响应头?
http.headers().disable()
.addHeaderWriter(new XFrameOptionsHeaderWriter(
new WhiteListedAllowFromStrategy(
Arrays.asList("https://example1.com", "https://example2.com"))));
在Http Response标题中,我得到:
X-Frame-Options:“ALLOW-FROM DENY”。
为什么我的原点不在标题值中列出?
答案 0 :(得分:4)
我最终静态地添加我的标题如下:
http
.headers().frameOptions().disable()
.addHeaderWriter(new StaticHeadersWriter("X-FRAME-OPTIONS", "ALLOW-FROM example1.com"));
答案 1 :(得分:0)
我一直在找同样的,但没有找到答案。无论我如何配置它,标题总是不正确的。
我的解决方法是使用Spring框架doc
中的委托头编写器由于我构建了一个逻辑,总是设置SAMEORIGIN,不包括一些白名单:
new DelegatingRequestMatcherHeaderWriter(
new NegatedRequestMatcher(
new OrRequestMatcher(
whiteLists
)
),
new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN);
背后的逻辑:如果白名单中有任何匹配则不添加标题,否则添加标题为SAMEORIGIN值。
我认为值得考虑,因为AFAIK并非所有浏览器都支持ALLOW-FROM。
答案 2 :(得分:0)
//disable 默认策略。 这一句不能省。
http.headers().frameOptions().disable();
//新增新的策略。
http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(
new WhiteListedAllowFromStrategy(
Arrays.asList("http://itaobops.aliexpress.com",
"https://cpp.alibaba-inc.com",
"https://pre-cpp.alibaba-inc.com"))));
答案 3 :(得分:0)
这是在Spring Boot 2.3中对我有用的安全配置代码片段:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.frameOptions()
.disable()
.addHeaderWriter(new XFrameOptionsHeaderWriter(new StaticAllowFromStrategy(URI.create("example.com"))))
...
答案 4 :(得分:0)
您可以按如下所示允许多个URL,但是我不知道这是否是正确的方法,仍然可以正常工作。
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable().authorizeRequests().anyRequest().permitAll()
.and()
.headers().defaultsDisabled()
.and()
.cors()
.and()
.headers()
.cacheControl()
.and()
.contentTypeOptions()
.and()
.httpStrictTransportSecurity().disable()
.and()
.headers()
.frameOptions().disable()
.addHeaderWriter(new StaticHeadersWriter("X-FRAME-OPTIONS",
"ALLOW-FROM example1.com",
"ALLOW-FROM example2.com",
"ALLOW-FROM example3.com",
"ALLOW-FROM example4.com",
"ALLOW-FROM example5.com"));
}
答案 5 :(得分:0)
您可以使用X-Content-Security-Policy和Content-Security-Policy代替X-Frame-Options,它们提供了更大的灵活性,允许iframe使用通配符访问多个域。
这里是一个例子-
http.csrf().disable()
.headers().addHeaderWriter(new StaticHeadersWriter(
"X-Content-Security-Policy",
"frame-ancestors self *.domain1.com *.domain2.com"))
.and()
.headers().addHeaderWriter(new StaticHeadersWriter(
"Content-Security-Policy",
"frame-ancestors self *.domain1.com *.domain2.com"))
X-Frame-Options值将被丢弃。