以相同的方法为 tls 和 Oauth2 配置 http 安全
http security config for tls and Oauth2 in the same method
我想制作一个配置文件来在我的 SecureConfig.java
中配置 TLS 和 Oauth2
tls 配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER);
}
Oauth2.0配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.requiresChannel()
.anyRequest()
.requiresSecure();
}
在同一个配置文件和方法中使用这两者的更好方法是什么? and() 是否正常工作?
像那样:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
.requiresChannel()
.anyRequest()
.requiresSecure();
}
你的两个过滤器链方法有问题(不管你在方法中配置什么
- Spring 安全性是一个过滤器链,请参阅
- 通过执行
configure(HttpSecurity http)
两次,您已经创建了 two spring-security-filter-chain
s。
- 由于您没有提供
http.requestMatcher(...)
,因此这两个链都适用于每个 url。这对 spring 安全性来说是一个问题,因为它只会将一个过滤器链应用于特定请求。因此,如果您尝试启动您的应用程序,它将无法启动并出现错误
- 您可以通过定义
@Order
注释来启动您的应用程序,这样 spring 安全性会选择适用于 url 的较小编号的注释。但是由于根据您的配置,这两个链都适用于每个 url,因此具有较低 @Order
的过滤器链会覆盖具有较高 @Order
的过滤器链,使其无用
解决方案
- 使用一个 class 扩展
WebSecurityConfigurerAdapter
这样你就有了一个安全过滤器链
通道安全与身份验证与授权
安全主要是4个方面。身份验证、授权、完整性和机密性。
过滤器中的内容与身份验证有关。您可能还定义了一些 urls 需要一些授权角色。所以那个配置是关于这两个方面的
requiresSecure()
您正在寻址 Confidentiality
。即,如果您在没有第一个的情况下使用 requiresSecure()
,您知道您不是在与某个中间人交谈,但您不会知道您在与谁交谈,因为这就是身份验证的目的。
由于它们是互补的安全方面,它们可以组合在一起,spring 将创建一个过滤器链,其中第一个过滤器确保您首先通过放置 ChannelProcessingFilter
作为第一关
我想制作一个配置文件来在我的 SecureConfig.java
中配置 TLS 和 Oauth2tls 配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER);
}
Oauth2.0配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.requiresChannel()
.anyRequest()
.requiresSecure();
}
在同一个配置文件和方法中使用这两者的更好方法是什么? and() 是否正常工作?
像那样:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
.requiresChannel()
.anyRequest()
.requiresSecure();
}
你的两个过滤器链方法有问题(不管你在方法中配置什么
- Spring 安全性是一个过滤器链,请参阅
- 通过执行
configure(HttpSecurity http)
两次,您已经创建了two spring-security-filter-chain
s。 - 由于您没有提供
http.requestMatcher(...)
,因此这两个链都适用于每个 url。这对 spring 安全性来说是一个问题,因为它只会将一个过滤器链应用于特定请求。因此,如果您尝试启动您的应用程序,它将无法启动并出现错误 - 您可以通过定义
@Order
注释来启动您的应用程序,这样 spring 安全性会选择适用于 url 的较小编号的注释。但是由于根据您的配置,这两个链都适用于每个 url,因此具有较低@Order
的过滤器链会覆盖具有较高@Order
的过滤器链,使其无用
解决方案
- 使用一个 class 扩展
WebSecurityConfigurerAdapter
这样你就有了一个安全过滤器链
通道安全与身份验证与授权
安全主要是4个方面。身份验证、授权、完整性和机密性。
过滤器中的内容与身份验证有关。您可能还定义了一些 urls 需要一些授权角色。所以那个配置是关于这两个方面的
requiresSecure()
您正在寻址Confidentiality
。即,如果您在没有第一个的情况下使用requiresSecure()
,您知道您不是在与某个中间人交谈,但您不会知道您在与谁交谈,因为这就是身份验证的目的。由于它们是互补的安全方面,它们可以组合在一起,spring 将创建一个过滤器链,其中第一个过滤器确保您首先通过放置
ChannelProcessingFilter
作为第一关