mockmvc测试端点?

kokeuurv  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(231)
@PostMapping("repo")
@PreAuthorize("hasAuthority('SCOPE_email')")
fun addRepo(
    @RequestBody addRepoRequest: AddRepo,
    @AuthenticationPrincipal jwt: Jwt
) {

我正在尝试测试一个端点,它需要一个经过验证的okta jwt令牌,并且在执行检查有效/无效电子邮件和作用域的测试时,不知道如何将jwt对象注入端点。
我在过去用oidc将oidc标记填充到mockmvc的安全上下文中,但这在用jwt(注入oidcuser为null)时不起作用:

val idToken = OidcIdToken(
        ID_TOKEN, Instant.now(),
        Instant.now().plusSeconds(60), claims
    )
    SecurityContextHolder.getContext().authentication = authenticationToken(idToken)
    val authInjector = SecurityContextHolderAwareRequestFilter()
    authInjector.afterPropertiesSet()
    mvc = MockMvcBuilders.webAppContextSetup(this.context).build()

还尝试使用mock bean来实现这一点,但错误是,在安全上下文中,应该有一个字符串,而不是指向需要模拟的内容:

@MockBean
        private lateinit var securityContext: SecurityContext
    ...
        fun testAddRepo() {
            `when`(securityContext.authentication)
                .thenReturn(getMockJwtToken())
            SecurityContextHolder.setContext(securityContext)

我也尝试过这种技术,但是jwt总是空的:如何在spring引导单元测试中模拟jwt身份验证?
有没有人有更好的方法来测试jwt端点?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题