|
@ -1,63 +1,149 @@
|
|
|
package com.yihu.jw.healthyhouse.interceptor;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.jw.healthyhouse.constant.LoginInfo;
|
|
|
import com.yihu.jw.healthyhouse.model.user.User;
|
|
|
import com.yihu.jw.healthyhouse.service.user.UserService;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.wlyy.HouseUserContant;
|
|
|
import javassist.*;
|
|
|
import javassist.bytecode.CodeAttribute;
|
|
|
import javassist.bytecode.LocalVariableAttribute;
|
|
|
import javassist.bytecode.MethodInfo;
|
|
|
import net.sf.json.JSON;
|
|
|
import org.aspectj.lang.JoinPoint;
|
|
|
import org.aspectj.lang.ProceedingJoinPoint;
|
|
|
import org.aspectj.lang.annotation.Around;
|
|
|
import org.aspectj.lang.annotation.Aspect;
|
|
|
import org.aspectj.lang.annotation.Before;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.context.request.RequestAttributes;
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
import org.springframework.web.method.HandlerMethod;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.lang.reflect.Method;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 用户激活状态验证拦截器
|
|
|
* 用户在线状态验证拦截器
|
|
|
* @author HZY
|
|
|
* @created 2018/10/9 9:19
|
|
|
*/
|
|
|
@Aspect
|
|
|
@Component
|
|
|
//@Aspect
|
|
|
//@Component
|
|
|
public class ActivatedInterceptor {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(ActivatedInterceptor.class);
|
|
|
|
|
|
@Autowired
|
|
|
private UserService userService;
|
|
|
|
|
|
@Before("execution(* com.yihu.jw.healthyhouse.controller..*.*(..))")
|
|
|
public void beforeTest(JoinPoint point) throws Throwable {
|
|
|
System.out.println("beforeTest:" + point.getArgs());
|
|
|
// @Around("execution(* com.yihu.jw.healthyhouse.controller..*.*(..))")
|
|
|
// public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable{
|
|
|
// ObjectMapper objectMapper = new ObjectMapper();
|
|
|
// RequestAttributes ra = RequestContextHolder.getRequestAttributes();
|
|
|
// ServletRequestAttributes sra = (ServletRequestAttributes) ra;
|
|
|
// HttpServletRequest request = sra.getRequest();
|
|
|
// HttpSession session = request.getSession();
|
|
|
// String method = request.getMethod();
|
|
|
// String queryString = request.getQueryString();
|
|
|
//
|
|
|
// String classType = joinPoint.getTarget().getClass().getName();
|
|
|
// Class<?> clazz = Class.forName(classType);
|
|
|
// String clazzName = clazz.getName();
|
|
|
// String methodName = joinPoint.getSignature().getName(); //获取方法名称
|
|
|
// Object[] args = joinPoint.getArgs();//参数
|
|
|
//
|
|
|
// String params = "";
|
|
|
// //获取请求参数集合并进行遍历拼接
|
|
|
// if(args.length>0){
|
|
|
// if("POST".equals(method)){
|
|
|
// Object object = args[0];
|
|
|
// Map map = getFieldsName(this.getClass(), clazzName, methodName,args);
|
|
|
// params = objectMapper.writeValueAsString(map);
|
|
|
// }else if("GET".equals(method)){
|
|
|
// Map<String, String[]> parameterMap = request.getParameterMap();
|
|
|
// params = objectMapper.writeValueAsString(parameterMap);;
|
|
|
// }
|
|
|
// }
|
|
|
// //获取参数名称和值
|
|
|
//// Map<String,Object > nameAndArgs = getFieldsName(this.getClass(), clazzName, methodName,args);
|
|
|
// System.out.println(params);
|
|
|
// return joinPoint.proceed();
|
|
|
//
|
|
|
// }
|
|
|
|
|
|
|
|
|
@Around("execution(* com.yihu.jw.healthyhouse.controller..*.*(..))")
|
|
|
public Object activatedAround(ProceedingJoinPoint joinPoint) throws Throwable{
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
|
|
|
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
|
|
|
HttpServletRequest request = sra.getRequest();
|
|
|
HttpSession session = request.getSession();
|
|
|
Object userId = session.getAttribute(LoginInfo.USER_ID);
|
|
|
if (userId == null ){
|
|
|
return failed("用户未登录,请登录!",-10000);
|
|
|
}
|
|
|
User user = userService.findById(userId.toString());
|
|
|
if (user == null ){
|
|
|
return failed("用户不存在,请重新登录!",-10000);
|
|
|
}else if (HouseUserContant.activated_lock.equals(user.getActivated())){
|
|
|
return failed("用户已被冻结,请联系管理员!",-10000);
|
|
|
}else if (HouseUserContant.activated_offline.equals(user.getActivated())){
|
|
|
return failed("用户已离线,请重新登录!",-10000);
|
|
|
}else {
|
|
|
return joinPoint.proceed();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
public static Map<String, Object> getKeyAndValue(Object obj) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
// 得到类对象
|
|
|
Class userCla = (Class) obj.getClass();
|
|
|
/* 得到类中的所有属性集合 */
|
|
|
Field[] fs = userCla.getDeclaredFields();
|
|
|
for (int i = 0; i < fs.length; i++) {
|
|
|
Field f = fs[i];
|
|
|
f.setAccessible(true); // 设置些属性是可以访问的
|
|
|
Object val = new Object();
|
|
|
try {
|
|
|
val = f.get(obj);
|
|
|
map.put(f.getName(), val);// 设置键
|
|
|
} catch (IllegalAccessException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
private Map<String, Object> getFieldsName(Class cls, String clazzName, String methodName, Object[] args) throws NotFoundException {
|
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
|
|
|
|
|
ClassPool pool = ClassPool.getDefault();
|
|
|
//ClassClassPath classPath = new ClassClassPath(this.getClass());
|
|
|
ClassClassPath classPath = new ClassClassPath(cls);
|
|
|
pool.insertClassPath(classPath);
|
|
|
|
|
|
CtClass cc = pool.get(clazzName);
|
|
|
CtMethod cm = cc.getDeclaredMethod(methodName);
|
|
|
MethodInfo methodInfo = cm.getMethodInfo();
|
|
|
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
|
|
|
LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
|
|
|
if (attr == null) {
|
|
|
// exception
|
|
|
}
|
|
|
// String[] paramNames = new String[cm.getParameterTypes().length];
|
|
|
int pos = Modifier.isStatic(cm.getModifiers()) ? 1 : 2;
|
|
|
for (int i = 0; i < cm.getParameterTypes().length; i++) {
|
|
|
map.put(attr.variableName(i + pos), args[i]);//paramNames即参数名
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected Envelop failed (String message, int status) {
|
|
|
Envelop envelop = new Envelop();
|
|
|
envelop.setMessage(message);
|
|
|
envelop.setStatus(status);
|
|
|
return envelop;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|