1、1 首先引入 jar 包 spring.jar aopalliance.jar aspectjrt.jar aspectjtools.jar aspectjweaver.jar cglib-nodep-2.1_3.jar cglib-src-2.2.jar 这些个jar 包不一定都用得上,但离配置到现在整理已经比较久了 有点忘了. 2 spring 配置文件头 3 定义 aop 拦截4 处理拦截的类 logMonitorAspectpublic class LogMonitor /* * 保存变量的 ThreadLocal,保持在同一线程中同步数据. */private static fina
2、l ThreadLocal SESSION_MAP = new ThreadLocal();private IUserLogInfoService userLogInfoService;public IUserLogInfoService getUserLogInfoService() return userLogInfoService;public void setUserLogInfoService(IUserLogInfoService userLogInfoService) this.userLogInfoService = userLogInfoService;/* 获得线程中保存的
3、属性.* * param attribute* 属性名称* return 属性值*/public static Object get(String attribute) Map map = (Map) SESSION_MAP.get();return map.get(attribute);/* 记录日志信息* param joinpoint* throws Exception* throws IllegalAccessException*/public void writeLogInfo(JoinPoint joinpoint) throws Exception, IllegalAccessE
4、xception UserInfoVO sysUse = (UserInfoVO) UserSession.get(Contents.SESSION_USER_KEY);/ 在基类 action 中 设用户信息/ UserSession.set(Contents.SESSION_USER_KEY, userVO);/ UserSession.set(Contents.SESSION_USER_IP, request.getRemoteAddr();String userIP = (String) UserSession.get(Contents.SESSION_USER_IP);String
5、temp = joinpoint.getStaticPart().toShortString();/ 获得操作类String classType = joinpoint.getTarget().getClass().getName();/ 获得方法名称String methodName = temp.substring(10, temp.length() - 1);Class className = Class.forName(classType);/ 获得方法的参数类型数组Object a = joinpoint.getArgs();Class o = new Classa.length;/
6、 for (int i = 0; i threadLocal = new ThreadLocal(); / public HttpServletRequest getContext() / return (HttpServletRequest)threadLocal.get(); / / public void setContext(HttpServletRequest request) / threadLocal.set(request); / / public void cleanContext() / threadLocal.set(null); / /* * 保存变量的 ThreadL
7、ocal,保持在同一线程中同步数据. */ private static final ThreadLocal SESSION_MAP = new ThreadLocal(); /* * 工具类的 protected 构造方法. */ protected UserSession() /* * 获得线程中保存的属性. * * param attribute * 属性名称 * return 属性值 */ public static Object get(String attribute) Map map = (Map) SESSION_MAP.get(); /System.out.println(m
8、ap.toString(); / System.out.println(map.containsKey(“usersession“); return map.get(attribute); /* * 获得线程中保存的属性,使用指定类型进行转型. * * param attribute * 属性名称 * param clazz * 类型 * param * 自动转型 * return 属性值 */ public static T get(String attribute, Class clazz) return (T) get(attribute); /* * 设置制定属性名的值. * * param attribute * 属性名称 * param value * 属性值 */ public static void set(String attribute, Object value) Map map = (Map) SESSION_MAP.get(); if (map = null) map = new HashMap(); SESSION_MAP.set(map); map.put(attribute, value); 8 另外在配置 aop 必须是接口的, 否则会出错看是否可以在 action 设置拦截效果应该更好的。