|
|
package com.yanzhen.framework.mvc; // 定义包名
|
|
|
|
|
|
import com.yanzhen.entity.Student; // 导入Student类
|
|
|
import com.yanzhen.entity.User; // 导入User类
|
|
|
import com.yanzhen.framework.exception.MyException; // 导入自定义异常类MyException
|
|
|
import com.yanzhen.framework.jwt.JWTUtil; // 导入JWT工具类JWTUtil
|
|
|
import org.springframework.web.servlet.HandlerInterceptor; // 导入Spring MVC的HandlerInterceptor接口
|
|
|
import org.springframework.web.servlet.ModelAndView; // 导入Spring MVC的ModelAndView类
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest类
|
|
|
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse类
|
|
|
|
|
|
public class TokenInterceptor implements HandlerInterceptor { // 定义TokenInterceptor类并实现HandlerInterceptor接口
|
|
|
|
|
|
@Override // 重写preHandle方法,在请求处理之前进行调用
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
String token = request.getHeader(JWTUtil.token); // 从请求头中获取token
|
|
|
|
|
|
String type = JWTUtil.getType(token); // 根据token获取类型
|
|
|
if("USER".equals(type)){ // 如果类型是USER
|
|
|
//根据token获取user对象
|
|
|
User user = JWTUtil.getUser(token); // 通过JWT工具类获取User对象
|
|
|
if(user == null){ // 如果User对象为空
|
|
|
throw new MyException("超时或不合法的token"); // 抛出自定义异常
|
|
|
}
|
|
|
String newToken = JWTUtil.sign(user); // 重新生成新的token
|
|
|
response.setHeader(JWTUtil.token,newToken); // 将新token设置到响应头中
|
|
|
response.setHeader("Access-Control-Expose-Headers", JWTUtil.token); // 设置允许暴露的响应头
|
|
|
request.setAttribute("user",user); // 将User对象设置到请求属性中
|
|
|
}else if("STUDENT".equals(type)){ // 如果类型是STUDENT
|
|
|
//根据token获取user对象
|
|
|
Student student = JWTUtil.getStudent(token); // 通过JWT工具类获取Student对象
|
|
|
if(student == null){ // 如果Student对象为空
|
|
|
throw new MyException("超时或不合法的token"); // 抛出自定义异常
|
|
|
}
|
|
|
String newToken = JWTUtil.signForStudent(student); // 重新生成新的token
|
|
|
response.setHeader(JWTUtil.token,newToken); // 将新token设置到响应头中
|
|
|
response.setHeader("Access-Control-Expose-Headers", JWTUtil.token); // 设置允许暴露的响应头
|
|
|
request.setAttribute("student",student); // 将Student对象设置到请求属性中
|
|
|
}
|
|
|
return true; // 返回true表示继续执行后续的拦截器和处理器
|
|
|
}
|
|
|
|
|
|
@Override // 重写postHandle方法,在请求处理之后但在视图渲染之前进行调用
|
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override // 重写afterCompletion方法,在整个请求结束之后进行调用
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
|
|
|
|
|
}
|
|
|
} |