Java Spring Boot HttpSecurity-@PreAuthorize-如何设置AuthenticationFilter?
我目前正在开发一个API授权。所以基本上我有一个过滤器Java Spring Boot HttpSecurity-@PreAuthorize-如何设置AuthenticationFilter?,java,spring,spring-boot,spring-security,spring-security-oauth2,Java,Spring,Spring Boot,Spring Security,Spring Security Oauth2,我目前正在开发一个API授权。所以基本上我有一个过滤器JwtAuthorizationFilter。在我的RestController中,我想注释应该通过@PreAuthorize(“hasRole('ADMIN')”)过滤的请求。因此,我现在的问题是:如何设置websecurityconfiguredapter(或任何其他东西)以将注释链接到JwtAuthorizationFilter @Configuration @EnableWebSecurity @EnableGlobalMethodS
JwtAuthorizationFilter
。在我的RestController中,我想注释应该通过@PreAuthorize(“hasRole('ADMIN')”)
过滤的请求。因此,我现在的问题是:如何设置websecurityconfiguredapter
(或任何其他东西)以将注释链接到JwtAuthorizationFilter
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Basically permit every request, but if needed (through @PreAuthorize) check via JwtAuthorizationFilter)
}
}
谢谢大家!!
向塞巴斯蒂安问好JwtAuthorizationFilter的目的应该是设置
认证
的授权。然后,Spring Security的默认方法安全性就足够了
您有两个选择:
使用SpringSecurity的内置JWT支持
如果JWT是由授权服务器创建的,那么就足够了。Spring Security附带了BealerTokenAuthenticationFilter
和JwtAuthenticationProvider
。过滤器将解析授权
头以获取令牌,提供商将验证令牌并构建基于范围
或scp
声明的身份验证
。在这种情况下,您可以执行类似于@PreAuthorize(“hasAuthority('SCOPE\u ADMIN')”)
的操作
如果需要自定义如何将JWT声明转换为GrantedAuthority
s,则可以发布JwtAuthenticationConverter
@Bean
有关完整的设置详细信息,请参阅。但基本上,您的配置如下所示:
http
.authorizeRequests((authz)->authz
.anyRequest().authenticated()
)
.oauth2ResourceServer((oauth2)->oauth2
.jwt(Customizer.withDefaults())
);
在没有授权服务器的情况下使用Spring Security内置的JWT支持
SpringSecurity的现有支持是在设计授权服务器时考虑的,但这不是一个要求
您可以使用您的应用程序
滚你自己的
您可以保留
JwtAuthorizationFilter
,但不清楚为什么Spring Security现有的支持不足。要添加筛选器,只需在(myFilter、BealerTokenAuthenticationFilter.class)之前执行addFilterBefore操作即可
。你可以看一看你在创建自己的过滤器时应该考虑的一些事情。为什么在Spring Security中已经内置了一个JWT过滤器?感谢您的广泛澄清!我的荣幸,塞巴斯蒂安·布伦纳特