package com.lf.server.interceptor; import com.alibaba.fastjson.JSON; import com.lf.server.entity.all.HttpStatus; import com.lf.server.entity.all.ResponseMsg; import com.lf.server.entity.all.StaticData; import com.lf.server.entity.sys.UserEntity; import com.lf.server.helper.StringHelper; import com.lf.server.helper.WebHelper; import com.lf.server.service.sys.TokenService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 身份认证拦截器 * @author WWW */ @Configuration public class AuthInterceptor implements HandlerInterceptor { private TokenService tokenService; private static final Log log = LogFactory.getLog(AuthInterceptor.class); private static final String NO_TOKEN = JSON.toJSONString(new ResponseMsg(HttpStatus.TOKEN_ERROR, "找不到令牌")); private static final String NO_LOGIN = JSON.toJSONString(new ResponseMsg(HttpStatus.NO_LOGIN_ERROR, "用户未登录")); public AuthInterceptor(TokenService tokenService) { this.tokenService = tokenService; } /** * Controller执行之前执行,如果返回值是true则代表放行,返回false则拦截 * * @param request * @param response * @param handler * @return */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { try { System.out.println(request.getRequestURI().toLowerCase() + "," + (handler instanceof HandlerMethod)); // 非方法,无需拦截 if (!(handler instanceof HandlerMethod)) { return true; } // 无需授权 if (noNeedAuth(request)) { return true; } String token = WebHelper.getToken(request); if (StringHelper.isNull(token)) { WebHelper.write2Page(response, NO_TOKEN); return false; } UserEntity ue = tokenService.getCurrentUser(request); if (ue == null) { WebHelper.write2Page(response, NO_LOGIN); return false; } //noinspection AlibabaRemoveCommentedCode // 权限校验 return true; } catch (Exception ex) { log.error(ex.getMessage() + ex.getStackTrace() + "\n"); return false; } } /** * 无需授权 * * @param request * @return */ private static boolean noNeedAuth(HttpServletRequest request) { String uri = request.getRequestURI().toLowerCase(); for (String page : StaticData.EXCLUDE_PATH) { if (uri.contains(page)) { return true; } } return false; } }