我目前正在开发一个api授权。所以基本上我有一个过滤器 JwtAuthorizationFilter
. 在我的restcontroller中,我想对应该通过 @PreAuthorize("hasRole('ADMIN')")
例如。所以我现在的问题是:如何设置 WebSecurityConfigureAdapter
(或任何其他东西)将注解与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)
}
}
谢谢您!向塞巴斯蒂安问好
1条答案
按热度按时间rjjhvcjd1#
目的
JwtAuthorizationFilter
应该是设置Authentication
被授予权力。然后,springsecurity的默认方法security就足够了。你有几个选择:
使用springsecurity的内置jwt支持
如果jwt是由授权服务器创建的,那么springsecurity的默认jwt支持就足够了。 Spring 安全船
BearerTokenAuthenticationFilter
以及JwtAuthenticationProvider
. 过滤器将解析Authorization
头来获取令牌,提供者将验证令牌并构造Authentication
这是基于scope
或者scp
索赔。如果那样的话,你会做一些@PreAuthorize("hasAuthority('SCOPE_ADMIN')")
.如果您需要自定义如何将jwt声明转换为
GrantedAuthority
s、 然后你可以发布一个JwtAuthenticationConverter
@Bean
.有关完整的安装细节,请参阅SpringSecurity的OAuth2.0资源服务器示例。不过,基本上,您的配置如下所示:
在没有授权服务器的情况下使用springsecurity的内置jwt支持
springsecurity的现有支持在设计时考虑了授权服务器,但这不是一个要求。
相反,您可以让您的应用程序生成自签名令牌。
自己滚吧
你可以保留你的
JwtAuthorizationFilter
,但不清楚为什么springsecurity现有的支持不够。要添加过滤器,只需addFilterBefore(myFilter, BearerTokenAuthenticationFilter.class)
. 你可以看看BearerTokenAuthenicationFilter
作为创建自己的过滤器时应考虑的一些事项的示例。