You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ssgl/zsq/TokenInterceptor.java

53 lines
3.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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