package com.panzhihua.service_equipment.resolvers; import com.panzhihua.common.redis.TokenManager; import com.panzhihua.common.utlis.Constant; import com.panzhihua.service_equipment.annotation.Authorization; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.connector.ResponseFacade; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; /** * 自定义拦截器,判断此次请求是否有权限 */ /** * 自定义拦截器,判断此次请求是否有权限 */ @Component @Slf4j public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Resource private TokenManager manager; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果不是映射到方法直接通过 if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); Object bean = handlerMethod.getBean(); String token; //从header中得到token String header = request.getHeader(Constant.UNION_AUTHORIZATION); request.getHeader(Constant.AUTHORIZATION); if (header != null) { String[] tokens = request.getHeader(Constant.UNION_AUTHORIZATION).split(" "); if (tokens.length >= 2) { token = request.getHeader(Constant.UNION_AUTHORIZATION).split(" ")[1]; } else { token = request.getHeader(Constant.UNION_AUTHORIZATION); } } else { token = request.getHeader(Constant.UNION_AUTHORIZATION); } if (manager.checkToken(token)) { //如果token验证成功,权限检查通过,将token对应的用户id存在request中,便于之后注入 request.setAttribute(Constant.CURRENT_USER_ID, manager.getUserId(token)); // SysUser ss = IUserService.selectData(manager.getUserId(token)+""); return true; } log.info("token{}",token); // if(!StringUtils.isEmpty(token)) // { //如果验证token失败,并且方法或类注明了Authorization,返回401错误 if (method.getAnnotation(Authorization.class) != null || bean.getClass().getAnnotation(Authorization.class) != null) { String reponse = "{\"result\": 449, \"message\": \"Overdue token\"}"; response.setStatus(200); response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); ResponseFacade facade = (ResponseFacade) response; facade.setContentLength(reponse.getBytes(StandardCharsets.UTF_8).length); facade.getWriter().write(reponse); return false; } // } return true; } }