關於生成驗證碼之後返回cookie丟失的問題

問題描述

在做登錄時進行驗證碼判斷的功能時,因爲要將生成驗證碼的文本存儲在Redis中,微服務框架無法直接使用Sesiion,所以需要模擬之前Session底層的做法,將session的id值存儲在cookie中來區分不同的瀏覽器客戶端訪問。所有需要在第一次生成驗證碼時,生成這個cookie返回給瀏覽器。當用戶第二次刷新驗證碼時,直接通過這個ID標識覆蓋Redis中存儲的驗證碼。

但是生成的cookie始終無法在Response對象中返回給瀏覽器。
Controller中的代碼是這樣的:

@RequestMapping(value = "getValiCodeImg", method = RequestMethod.GET)
    public void getValicodeImg(HttpServletRequest request, HttpServletResponse response) {
      try {
            verifyCode.drawImage(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        userService.saveValiCode(valiCodeId, verifyCode);
        String valiCodeId = CookieUtils.getCookieValue(request, "valiCodeId");
        if (valiCodeId == null || valiCodeId.equals("")) {
            valiCodeId = "valiCodeId_"+UUIDUtil.getUUID();
            CookieUtils.setCookie(request, response, "valiCodeId", valiCodeId);
        }
      
    }

解決方式

在設置Cookie之後,再生成驗證碼就可以了:

@RequestMapping(value = "getValiCodeImg", method = RequestMethod.GET)
    public void getValicodeImg(HttpServletRequest request, HttpServletResponse response) {
        String valiCodeId = CookieUtils.getCookieValue(request, "valiCodeId");
        if (valiCodeId == null || valiCodeId.equals("")) {
            valiCodeId = "valiCodeId_"+UUIDUtil.getUUID();
            CookieUtils.setCookie(request, response, "valiCodeId", valiCodeId);
        }
        try {
            verifyCode.drawImage(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        userService.saveValiCode(valiCodeId, verifyCode);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章