我正在尝试为kotlin的webflux项目设置Spring Security 。假设我有以下端点: /departments/{deptId}/users
如果下面两个检查都是真的,我需要允许访问它:
如果用户有权访问给定的deptid
如果用户具有用户管理权限。
我可以使它们分开工作,但我找不到一种方法将它们组合在一起(逻辑and):如果
用户有权限,但没有访问权限
用户有访问权限,但没有权限,如果有访问权限,则返回200
下面的代码忽略第一个检查-它仅检查用户是否具有用户管理权限:
@Bean
fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain =
http
.oauth2ResourceServer()
.jwt().jwtAuthenticationConverter(jwtConverter).and()
.and()
.authorizeExchange()
.pathMatchers("/departments/{deptId}/**").access(hasAccessToDept)
.and()
.authorizeExchange()
.pathMatchers(
"/departments/{deptId}/users*",
"/departments/{deptId}/users/*")
.hasAuthority(USER_MANAGEMENT)
.anyExchange().authenticated()
.and()
.build()
1条答案
按热度按时间p5fdfcr11#
你可以看看“基于表达式的安全性”。有了它,您可以将表达式放在相应的控制器方法上。您也可以访问参数和返回值,而且我特别喜欢这些定义接近于它们将应用到的代码。
或
以下是文档的链接:https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/el-access.html
编辑:
您也可以在过滤器配置中使用以下表达式: