HandlerInterceptor:攔截器驗證token只能返回布爾值的問題

手機端攔截器的問題,記錄一下,以後備用。

APP每次調用接口的時候,需要在路徑後加一個TOKEN,我需要做一個統一的處理,每次請求過來都得驗證TOKEN是否有效。

開始的時候,preHandle方法只是返回一個boolean值,但APP要求返回一個code,表明是什麼情況。

後來思考了一下,可以把這個攔截器的方法,繼承baseController,在裏面寫一個公用的返回數據的方法,這樣就解決了返回值只能是布爾值的問題,就可以傳code了。

貼一下代碼:

public class MobileInterceptor extends BaseController implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        String TOKEN=request.getParameter("TOKEN");
        logger.debug("TOKEN======="+TOKEN);
        //如果TOKEN是空並且不是登錄請求直接返回     
     if(StringUtils.isBlank(TOKEN)&&!request.getRequestURI().contains("login/carLogin")) {
            this.appException(response, "R10001", "TOKEN爲空");
            return false;
        }
        
        //如果TOKEN不是空,說明已經登錄,獲取登錄人信息
        User user=UserUtils.getByTOKEN(TOKEN);
        if (user==null) {
            this.appException(response, "R10002", "TOKEN失效");
            return false;
        }
        return true;
    }

……

}

這個是basecontroller裏的方法

protected String appException(HttpServletResponse response, String code, String msg) {
        try {
            ResRslt result = null;
            if(code.startsWith("S00")){
                result = new ResRslt(1, code, msg);
            }else{
                result = new ResRslt(0, code, msg);
            }
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            response.getWriter().print(JsonMapper.toJsonString(result));
            return null;
        } catch (IOException e) {
            return null;
        }
    }

 

 

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