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.
47 lines
1.6 KiB
47 lines
1.6 KiB
package cn.star.interceptor;
|
|
|
|
import cn.star.util.JwtUtil;
|
|
import io.jsonwebtoken.Claims;
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.io.PrintWriter;
|
|
|
|
public class TokenInterceptor implements HandlerInterceptor {
|
|
|
|
@Override
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
//获取请求头中的token
|
|
|
|
String token = request.getHeader("Authorization");
|
|
|
|
//验证token格式
|
|
if(token == null || !token.startsWith("Bearer")) {
|
|
returnError(response,"请先登录");
|
|
return false;
|
|
}
|
|
token = token.substring(7);
|
|
|
|
//验证token有效性
|
|
if (!JwtUtil.isTokenValid(token)) {
|
|
returnError(response,"登录已过期,请重新登录");
|
|
return false;
|
|
}
|
|
|
|
//解析token获取角色,存入request继续使用
|
|
Claims claims = JwtUtil.parseToken(token);
|
|
request.setAttribute("userId",claims.get("userId",Long.class));
|
|
request.setAttribute("role",claims.get("role",Long.class));
|
|
return true;
|
|
}
|
|
|
|
//返回错误信息
|
|
private void returnError(HttpServletResponse response, String message) throws Exception {
|
|
response.setContentType("text/html;charset=UTF-8");
|
|
PrintWriter out = response.getWriter();
|
|
out.write("<script>alert('" + message + "'); window.location.href='/login.html';</script>");
|
|
out.flush();
|
|
out.close();
|
|
|
|
}
|
|
}
|