一些背景:我们有一个联调类,用于测试与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'))"
我们已经按照此处的建议配置了Web安全配置,因此添加了类似bean的:
@Bean
GrantedAuthorityDefaults grantedAuthorityDefaults() {
return new GrantedAuthorityDefaults(""); // Remove the ROLE_ prefix
}
除了文章顶部显示的测试失败之外,一切都很顺利,因为在测试环境中,Spring security仍然会为每个模拟用户角色添加前缀ROLE\u1。
有没有人能解释一下应该如何配置测试类,或者-例如-应该如何操作SecurityContext来在测试中去掉这个前缀?
这对我来说很好:
配置:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
private final ApplicationContext context;
@Autowired
public GlobalMethodSecurityConfig(ApplicationContext context) {
this.context = context;
}
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler handler =
new DefaultMethodSecurityExpressionHandler();
handler.setDefaultRolePrefix("");
handler.setApplicationContext(context);
return handler;
}
}
测验:
@Test
@WithMockUser(roles = "USER")
void getCard() {
...
}
如果这没有帮助,您能否在GitHub上显示一个工作代码示例?(这可能有助于发现问题)
很简单,打开这个注释的javadoc并使用权限
而不是角色
我有一个使用JSONObject的函数,我需要测试它。下面是我的代码: 这是我想测试的代码: 谢谢
我知道JMeter是一个很好的性能工具。 不幸的是,对于性能测试,我只有:Selenium、Junit、Jenkins(或者Jenkins的其他插件,你知道吗?) 我有用Selenium编写的Junit测试。 Jenkins中的每个节点都能服务5个线程。在多台机器上并行运行测试(在Chrome中)以轻松检查每个测试是否会在相似的时间通过,这是一个好的解决方案吗? 也许你有另一种使用Selenium
问题内容: 目前,我有以下 build.gradle 文件: 这 的build.gradle 文件是我的仓库 在这里 。我所有的主文件都在 src / model /中 ,它们各自的测试在 test / model中 。 如何正确添加JUnit 4 依赖项 ,然后在 测试/模型 文件夹中运行那些测试? 问题答案: 如何正确添加junit 4依赖关系? 假设您要针对标准Maven(或等效版本)存储库
我想为我的一个编写一个简单的测试,并断言输入已正确映射到: 问题:如何向该servlet发送请求正文。然后再检查一下字段是否都设置正确? 这可能与此类似,但我不知道如何检查/监视已解析的DTO? @重复标记:这不是链接问题(关于如何读取响应正文字符串)的重复。我实际上是在要求进行身体测试。
当前我有以下build.gradle文件: 此build.gradle文件用于我的存储库。我的所有主文件都在src/model/中,它们各自的测试都在test/model中。
问题内容: 我试过了: 但是,CRaSSHD仍会启动。尽管目前它不会损害测试,但我想在单元测试期间禁用不必要的模块,以加快速度并避免潜在的冲突。 问题答案: 最佳答案并不指向更简单,更灵活的解决方案。 只是放置一个 测试类上方的注释。这意味着其他测试不受当前测试的特殊情况的影响。如果存在影响大多数测试的配置,请考虑使用spring配置文件代替当前的最佳答案。 感谢@skirsch鼓励我将其从评论升