java - 在 JUnit 测试中给定 JWT token 时,MockMVC 不返回任何值

标签 java spring-boot junit mockito jwt

@Test
public void getUsers_Success() throws Exception {

            when(userRepository.findAll()).thenReturn(userList.getUsers());

            String token = TokenAuthenticationService.createToken("me@me.com");
            assertNotNull(token);

            RequestBuilder request = MockMvcRequestBuilders
                    .get("/api/v1/users")
                    .header("Authorization", "Bearer "+ token);

            MvcResult result = mockMvc.perform(request)
                    .andExpect(status().isOk())
                    .andExpect(content().json(usersJson))
                    .andReturn();

            result.getResponse().getContentAsString();
        }

这是 token 生成

public static String createToken(String username) {
        String jwt = Jwts.builder()
                .setSubject(username)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
                .signWith(SignatureAlgorithm.HS512, SECRET)
                .compact();

        return jwt;
    }

当我运行此测试时,响应始终为空。然后 json 解析失败,因为响应为空。

最佳答案

方法 signWith(SignatureAlgorithm.HS512, SECRET) 已弃用,并将在未来版本中删除。你应该使用:

signWith(SECRET, SignatureAlgorithm.HS512)

我认为 SECRET 是一个 String 对象 => 你需要根据你的 secret 生成 secret key :

signWith(Keys.hmacShaKeyFor(SECRET.getBytes()), SignatureAlgorithm.HS512)

关于java - 在 JUnit 测试中给定 JWT token 时,MockMVC 不返回任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545347/

相关文章:

java - 如何指定 TestNG 测试在 Jenkins 构建中运行?

java - Android 应用程序中的 ClassCastException

java - 如何在 gradle jar 构建过程中更新属性文件中的值?

java - 仅验证少数元素的单元测试

spring - 模拟 Keycloak token 以测试 Spring Controller

java:如何模拟 Calendar.getInstance()?

java - 如何使用 Wicket 7 制作可缓存的图像?

java - 如何优雅地关闭嵌入式jetty服务器应用程序?

spring-boot - Spring Boot微服务监控与管理

java - Spring Boot - Spring Boot Starter Actuator 的问题