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;
|
}
|
}
|