gpt4 book ai didi

java - 使用 JUnit 测试 Spring 安全性时如何删除 "ROLE_"前缀?

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:07 24 4
gpt4 key购买 nike

一些背景:我们有一个集成测试类,用于测试与 Spring 授权一起使用的常量 SPEL 字符串。简单的例子:

@SpringBootTest
@RunWith(SpringRunner.class)
public class HasRoleConstantsTest {
@Test
@WithMockUser(username = "uname", roles = "ADMIN")
public void test() {
// just calling some test method with appropriate annotation
}
}

前面提到的常量的用法如下:

@PreAuthorize(PREDEFINED_AUTHORIZATION_RULE)

其中常量可能是一些更复杂的检查,例如:

public static final String PREDEFINED_AUTHORIZATION_RULE =
"hasRole('ADMIN') OR (hasRole('MAINTAINER') AND hasRole('#id'))"

我们已按照建议配置了 WebSecurityConfiguration here所以添加像这样的bean:

@Bean
GrantedAuthorityDefaults grantedAuthorityDefaults() {
return new GrantedAuthorityDefaults(""); // Remove the ROLE_ prefix
}

一切都像魅力一样,除了帖子顶部所示的测试失败,因为在测试环境中 Spring security 仍然为每个模拟用户角色添加前缀 ROLE_

有人可以阐明如何配置测试类,或者 - 例如 - 应如何操作 SecurityContext 以在测试中删除此前缀?

最佳答案

很简单,打开这个注解的javadoc,使用authorities代替roles

关于java - 使用 JUnit 测试 Spring 安全性时如何删除 "ROLE_"前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com