手機端攔截器的問題,記錄一下,以後備用。
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;
}
}