由於我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測試服務器部分說明(完整運行服務器)
綜合以上,就應該已經很清楚了,上面的代碼部分就不一一說明了,歡迎下方留言