SpringBoot單元測試攜帶Cookie

由於我SpringBoot項目,集成了SpringSecurity,而Security框架使用Redis存儲Session,所以,這裏列出幾個關鍵的類

org.springframework.session.data.redis.RedisIndexedSessionRepository:解析請求攜帶的Cookie的Repository類
org.springframework.session.web.http.DefaultCookieSerializer:默認提取Cookie序列化的類;org.springframework.session.web.http.DefaultCookieSerializer#readCookieValues看這個方法,就能看出解析的是 Cookie Header

 

 

 

這是使用示例:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)  //這裏是說明:以隨機端口進行服務器的完整啓動(這樣請求就會經過過濾器、攔截器等前置處理)
@Slf4j
class UploadFileApiControllerTest {

    @Resource
    private TestRestTemplate testRestTemplate;

    private HttpHeaders headers;

    private List<String> cookies;

    @BeforeEach
    void login() throws Exception {

        ResponseEntity<String> exchange = testRestTemplate.exchange("/user/login", HttpMethod.POST, new HttpEntity<>("{json內容}"), String.class);
        System.out.println(exchange.getBody());

        headers = exchange.getHeaders();
        cookies = exchange.getHeaders().get("Set-Cookie");

    }


    @Test
    void initializedUploadFileInfo() throws Exception {


        File file = ResourceUtils.getFile("classpath:TestLinuxVideo.mp4");

        InitializedUploadFileInfoDTO initializedUploadFileInfoDTO = new InitializedUploadFileInfoDTO();
        initializedUploadFileInfoDTO.setFileMD5(DigestUtils.md5DigestAsHex(new FileInputStream(file)));
        initializedUploadFileInfoDTO.setFilename(file.getName());
        initializedUploadFileInfoDTO.setTotalBlockLength(1);
        initializedUploadFileInfoDTO.setTotalByteSize(file.length());

        String s = new Gson().toJson(initializedUploadFileInfoDTO);

        log.info("文件初始化信息,請求內容:{}",s);

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.putAll(headers);
        httpHeaders.add("Cookie",cookies.get(0));  //這裏設置base64解碼之前的字符串,因爲Security框架會進行解碼判斷是否登錄的

        HttpEntity<String> stringHttpEntity = new HttpEntity<>(s,httpHeaders);

        BaseResponseDataVo baseResponseDataVo = testRestTemplate.postForObject("/upload/init", stringHttpEntity, BaseResponseDataVo.class);
        System.out.println(baseResponseDataVo);


    }

}

 

 

這裏看下SpringBoot測試部分的文檔:

SpringBoot測試服務器部分說明(完整運行服務器)

TestRestTemplate類文檔的部分說明

 

綜合以上,就應該已經很清楚了,上面的代碼部分就不一一說明了,歡迎下方留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章