将 X-Frame-Options 的配置更改为 ALLOW-FROM 时 Spring 引导中出现异常
Exception in Spring Boot when changing configuration of X-Frame-Options to ALLOW-FROM
我在一个使用 Spring Boot 的项目中工作了一段时间,现在,作为一项要求,我正在使用一些我需要渲染的 html 文件,一个他们中的一个使用 iframe 来显示另一个网页的信息(来自同一公司的另一个业务部门,但在不同的域中)。
到目前为止,我在Spring配置中所做的如下:
@EnableWebSecurity
@Configuration
public class MyApplicationConfiguration extends WebSecurityConfigurerAdapter {
@Value("${company.domain}")
private String companyDomain;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers().frameOptions().disable().addHeaderWriter(new XFrameOptionsHeaderWriter(new StaticAllowFromStrategy(URI.create(this.companyDomain))));
}
}
根据我在 Internet 和论坛上查看的内容,它应该可以正常工作,但它没有提到以下内容:
Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique. Order of 100 was already used on com.sampleapp.myapp.ecards.MyApplicationConfiguration$$EnhancerBySpringCGLIB$364a75@13ecedf6, so it cannot be used on com.sampleapp.dep.dsp.core.autoconfigure.DsfCoreAutoConfiguration$DSFServerWebSecurityConfig$$EnhancerBySpringCGLIB$$a540fd8@7ec416a0 too.
顺便提一下,我看到解决方案是删除项目上下文中的@Order 批注,但我的项目中没有任何@Order 批注。此外,该公司的项目是使用一些预定义的 Maven 原型创建的,这些原型将为所有软件组件创建自定义文件夹结构,并创建具有所有必需依赖项的 pom.xml(使用这些依赖项是必须的,所以我不能删除它们中的任何一个,只是添加)。此外,我无法编辑或删除用作项目依赖项的组件上的注释。
您会推荐什么其他解决方案?或者是否有解决此问题的解决方法?
提前感谢您的时间和帮助。
WebSecurityConfigurer
适配器的默认顺序是 100,您的应用程序中似乎有两个:
com.sampleapp.myapp.ecards.MyApplicationConfiguration
com.sampleapp.dep.dsp.core.autoconfigure.DsfCoreAutoConfiguration$DSFServerWebSecurityConfig
您应该更新其中一个以使用 @Order
明确注释,指定 100 以外的值。考虑到您描述的限制,将 @Order
添加到 com.sampleapp.myapp.ecards.MyApplicationConfiguration
似乎更有可能没事。它的顺序应该更高还是更低将取决于您的安全配置的不同部分之间的关系,如果该配置重叠,您希望哪个优先。
我在一个使用 Spring Boot 的项目中工作了一段时间,现在,作为一项要求,我正在使用一些我需要渲染的 html 文件,一个他们中的一个使用 iframe 来显示另一个网页的信息(来自同一公司的另一个业务部门,但在不同的域中)。
到目前为止,我在Spring配置中所做的如下:
@EnableWebSecurity
@Configuration
public class MyApplicationConfiguration extends WebSecurityConfigurerAdapter {
@Value("${company.domain}")
private String companyDomain;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers().frameOptions().disable().addHeaderWriter(new XFrameOptionsHeaderWriter(new StaticAllowFromStrategy(URI.create(this.companyDomain))));
}
}
根据我在 Internet 和论坛上查看的内容,它应该可以正常工作,但它没有提到以下内容:
Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique. Order of 100 was already used on com.sampleapp.myapp.ecards.MyApplicationConfiguration$$EnhancerBySpringCGLIB$364a75@13ecedf6, so it cannot be used on com.sampleapp.dep.dsp.core.autoconfigure.DsfCoreAutoConfiguration$DSFServerWebSecurityConfig$$EnhancerBySpringCGLIB$$a540fd8@7ec416a0 too.
顺便提一下,我看到解决方案是删除项目上下文中的@Order 批注,但我的项目中没有任何@Order 批注。此外,该公司的项目是使用一些预定义的 Maven 原型创建的,这些原型将为所有软件组件创建自定义文件夹结构,并创建具有所有必需依赖项的 pom.xml(使用这些依赖项是必须的,所以我不能删除它们中的任何一个,只是添加)。此外,我无法编辑或删除用作项目依赖项的组件上的注释。
您会推荐什么其他解决方案?或者是否有解决此问题的解决方法?
提前感谢您的时间和帮助。
WebSecurityConfigurer
适配器的默认顺序是 100,您的应用程序中似乎有两个:
com.sampleapp.myapp.ecards.MyApplicationConfiguration
com.sampleapp.dep.dsp.core.autoconfigure.DsfCoreAutoConfiguration$DSFServerWebSecurityConfig
您应该更新其中一个以使用 @Order
明确注释,指定 100 以外的值。考虑到您描述的限制,将 @Order
添加到 com.sampleapp.myapp.ecards.MyApplicationConfiguration
似乎更有可能没事。它的顺序应该更高还是更低将取决于您的安全配置的不同部分之间的关系,如果该配置重叠,您希望哪个优先。