package com.test.lmp.interceptor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* <p>用户授权拦截器</p>
*
* @author limaopeng
* @date 2021-10-13 10:10
*/
@Configuration
@Component
public class TokenAuthInterceptor implements HandlerInterceptor {
@Autowired
private ISysLoginService sysLoginService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) {
// 1.如果是其他系统登录,查看是否有权限
if (UserCacheUtils.getUserInfo() == null) {
return true;
}
// 2.从 http 请求头中取出 access_token
String accessToken = UserCacheUtils.getAccessTokenByRequest(request);
// 3.如果令牌已经过期 或者 不存在 则拒绝访问
Long time = sysLoginService.getTokenExpire(accessToken);
if (StringUtils.isBlank(accessToken) || time == null || time < -1) {
if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
throw new TokenException(sysLoginService.getRefreshTokenByToken(accessToken), "令牌不存在或已经过期!");
}else{
//方法一
try {
response.sendRedirect(request.getContextPath()+"/login");
} catch (IOException e) {
e.printStackTrace();
}
//方法二
// try {
// PrintWriter out = response.getWriter();
// StringBuffer buffer = new StringBuffer();
// buffer.append("<script type='text/javascript' charset='utf-8'>");
// buffer.append("window.top.location.href='/login';");
// buffer.append("</script>");
// out.println(buffer.toString());
// } catch (IOException e) {
// e.printStackTrace();
// }
return false;
}
}
return true;
}
}
HandlerInterceptor拦截器根据请求类型返回信息或重定向到登录页
最新推荐文章于 2023-07-26 20:03:20 发布
关键词由CSDN通过智能技术生成