package com.doumee.config.Jwt;
|
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.config.annotation.LoginRequired;
|
import com.doumee.config.annotation.UserLoginRequired;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.dao.business.model.Member;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.servlet.HandlerInterceptor;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
@Configuration
|
public class WebMvcConfig implements WebMvcConfigurer {
|
@Resource
|
private JwtTokenUtil jwtTokenUtil;
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
|
@Autowired
|
private RedisTemplate<String,Object> redisTemplate;
|
|
/**
|
* 是否开发者
|
*/
|
@Value("${debug_model}")
|
private Boolean isDebug;
|
/**
|
* 添加拦截器
|
*/
|
@Override
|
public void addInterceptors(InterceptorRegistry registry) {
|
//API接口JwtToken拦截器
|
HandlerInterceptor TokenInterceptor = new HandlerInterceptor() {
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
// 如果不是映射到方法直接通过
|
if (!(handler instanceof HandlerMethod)) {
|
return true;
|
}
|
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
|
Class<?> beanType = handlerMethod.getBeanType();
|
Boolean checkFlag = false;
|
if(!( handlerMethod.hasMethodAnnotation(LoginRequired.class) || handlerMethod.hasMethodAnnotation(UserLoginRequired.class))
|
){
|
return true;
|
}
|
String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
|
if(StringUtils.isBlank(token)){
|
throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
|
}
|
if (handlerMethod.hasMethodAnnotation(LoginRequired.class)) {
|
checkFlag = checkLogin(request,response,token);
|
}
|
if(!checkFlag){
|
throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
|
}
|
return true;
|
}
|
};
|
registry.addInterceptor(TokenInterceptor).addPathPatterns("/web/**");
|
}
|
|
|
public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response,String token){
|
try {
|
Member member = jwtTokenUtil.getUserInfoByToken(token);
|
if(member == null){
|
return false;
|
}
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
|
}
|
}
|
|
}
|