package cn.besteam.modules.shiro.authc.aop; import cn.besteam.common.api.vo.Result; import cn.besteam.common.aspect.annotation.OpenApi; import cn.besteam.common.constant.CommonConstant; import cn.besteam.common.constant.ErrorCode; import cn.besteam.modules.shiro.authc.util.EnvUtils; import cn.besteam.modules.system.entity.SysUser; import cn.besteam.modules.system.service.ISysUserService; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 登录验证Interceptor * * @author jacob */ @Component @Slf4j public class LoginValidateInterceptor extends HandlerInterceptorAdapter { @Autowired private ISysUserService sysUserService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { return true; } String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); if (token == null && request.getCookies() != null) { for (Cookie cookie : request.getCookies()) { if (CommonConstant.X_ACCESS_TOKEN.equals(cookie.getName())) { token = cookie.getValue(); break; } } } SysUser user = sysUserService.getByToken(token); EnvUtils.addUser(user); if (handler instanceof HandlerMethod && null != ((HandlerMethod) handler).getMethodAnnotation(OpenApi.class)) { return true; } if (user == null) { //设置返回编码 response.setCharacterEncoding("UTF-8"); //设置返回类型和内容编码 response.setContentType("application/json;charset=UTF-8"); //输出数据部分 response.getWriter().write(JSON.toJSONString(Result.error(ErrorCode.USER_LOGIN_REQUIRE))); return false; } return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { EnvUtils.remove(); } }