package com.javaweb.platform.interceptor;
|
|
import java.io.OutputStream;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
import com.javaweb.common.annotation.UserAuth;
|
import com.javaweb.platform.domain.FrontUser;
|
import com.javaweb.platform.utils.UserAuthCacheUtils;
|
|
/**
|
* 权限验证拦截器
|
* @author Admin
|
*
|
*/
|
@Component
|
public class UserAuthInterceptor extends HandlerInterceptorAdapter{
|
|
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
// 验证权限
|
if (this.hasPermission(handler,request)) {
|
return true;
|
}
|
|
response.setHeader("content-type", "text/html;charset=utf-8");
|
|
String data = "authInvalid";
|
|
OutputStream out = response.getOutputStream();
|
// 以什么编码打入
|
out.write(data.getBytes("utf-8"));
|
return false;
|
|
|
// return false;
|
}
|
|
/**
|
* 是否有权限,
|
* 后续可以考虑写入 redis 或者 数据表,
|
* 目前以Cache 形式实现
|
*/
|
private boolean hasPermission(Object handler,HttpServletRequest request) {
|
if (handler instanceof HandlerMethod) {
|
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
// 获取方法上的注解
|
UserAuth requiredPermission = handlerMethod.getMethod().getAnnotation(UserAuth.class);
|
// 如果方法上的注解为空 则获取类的注解
|
if (requiredPermission == null) {
|
requiredPermission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(UserAuth.class);
|
}
|
if (requiredPermission == null) {
|
return true;
|
}
|
|
//验证前端传递的token
|
String token = request.getParameter("token");
|
if (token != null) {
|
//如果还有token值
|
if(UserAuthCacheUtils.userCaches.containsKey(token)){
|
//验证传递的token 和用户的token 是否一致
|
FrontUser frontUser = (FrontUser) UserAuthCacheUtils.getCahce(token);
|
if(token.equals(frontUser.getAccessToken())){
|
return true;
|
}
|
|
}
|
return false;
|
|
} else {
|
return false;
|
}
|
|
}
|
return true;
|
}
|
@Override
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
}
|
@Override
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
}
|
|
}
|