国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

springMVC +Mybatis +spring aop 實現用戶系統操作日志記錄

2019-11-08 02:58:53
字體:
來源:轉載
供稿:網友

業務場景:業務要求記錄用戶在系統的操作行為,并保存到數據庫當中。

1、自定義注解,記錄操作日志

import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** @company  ********** @description 類的方法描述注解* @author zzg* @create 2017-02-03==17*/@Target(ElementType.METHOD)   @Retention(RetentionPolicy.RUNTIME)   @Documented  @Inherited  public @interface MethodAction {	/**	 * 方法描述	 * @return	 */	public String optionDescription() default "no description"; 		/**	 * 方法名稱	 * @return	 */	public String methodName() default "no method name"; }2、切面類

package aspect;import org.aspectj.lang.PRoceedingJoinPoint;import org.apache.commons.lang.StringUtils;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.alibaba.fastjson.JSON;import com.wlsq.kso.annotation.MethodAction;import com.wlsq.kso.entity.AccountSysLog;import com.wlsq.kso.service.AccountSysLogService;import com.wlsq.kso.util.SpringContextUtil;import java.lang.reflect.Method;import java.util.Date;import javax.servlet.http.HttpServletRequest;public class AccountSysOptionLogAspect {		public Object doSystemLog(ProceedingJoinPoint point) throws Throwable {				// 切入方法名稱		String methodName = point.getSignature().getName();				   		// 目標方法不為空		if (StringUtils.isNotEmpty(methodName)) {			String targetName = point.getTarget().getClass().getName();  			Class targetClass = Class.forName(targetName);						Method[] methods = targetClass.getMethods();			for (Method m : methods) { 				  if (m.getName().equals(methodName)) { 					  boolean hasAnnotation = m								.isAnnotationPresent(MethodAction.class);						if (hasAnnotation) {							HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder									.getRequestAttributes()).getRequest();		                    //請求參數							String parame = null;							StringBuilder builder = new StringBuilder();														// 用戶openId							String userOpenId = request.getParameter("userOpenId") == null ? null									: request.getParameter("userOpenId").trim();							String accessToken = request.getParameter("accessToken") == null ? null									: request.getParameter("accessToken").trim();// 用戶訪問令牌							String generalAccount = request.getParameter("generalAccount") == null ? null									: request.getParameter("generalAccount").trim();// 未來社區總賬戶							String sellerOpenId = request.getParameter("sellerOpenId") ==null ? null :request.getParameter("sellerOpenId").trim();//商戶唯一編號 							String consumState = request.getParameter("consumState") == null ? null									: request.getParameter("consumState").trim();// 消費狀態【0:未消費,1:支付,2支付超時,訂單取消																					// ,3、已支付,超時需要退款】							String consumType = request.getParameter("consumType") == null ? null									: request.getParameter("consumType").trim();// 消費類型【0:普通商品,1:服務商品,2預售商品,3余額充值】							String money = request.getParameter("money") == null ? null									: request.getParameter("money").trim();// 消費金額							String orderDetail = request.getParameter("orderDetail") == null ? null									: request.getParameter("orderDetail").trim();// 訂單詳情							String orderNum = request.getParameter("orderNum") == null ? null									: request.getParameter("orderNum").trim();// 訂單編號							String playType = request.getParameter("playType") == null ? null									: request.getParameter("playType").trim();// 支付平臺類型【0:余額支付,1:微信支付,2:支付寶支付】							String plateType = request.getParameter("plateType") == null ? null									: request.getParameter("plateType").trim();// 平臺類型【0:未來社區】														String sign = request.getParameter("sign") == null ? null : request									.getParameter("sign").trim();// 數字簽名證書。														//設置支付密碼							String passWord = request.getParameter("password") == null ? null : request									.getParameter("password").trim();//支付密碼。							String optionType = request.getParameter("optionType") == null ? null : request									.getParameter("optionType").trim();// 支付密碼動作。														if(userOpenId != null){								builder.append(";參數userOpenId:"+userOpenId);							}							if(accessToken != null){								builder.append(";參數accessToken:"+accessToken);							}							if(generalAccount !=null){								builder.append(";參數generalAccount:"+generalAccount);							}							if(sellerOpenId !=null){								builder.append(";參數sellerOpenId:"+sellerOpenId);							}							if(consumState !=null){								builder.append(";參數consumState:"+consumState);							}							if(consumType !=null){								builder.append(";參數consumType:"+consumType);							}							if(money !=null){								builder.append(";參數money:"+money);							}							if(orderDetail !=null){								builder.append(";參數orderDetail:"+orderDetail);							}							if(orderNum !=null){								builder.append(";參數orderNum:"+orderNum);							}							if(playType !=null){								builder.append(";參數playType:"+playType);							}							if(plateType != null){								builder.append(";參數plateType:"+plateType);							}							if(sign !=null){								builder.append(";參數sign:"+sign);							}							if(password !=null){								builder.append(";參數password:"+password);							}							if(optionType !=null){								builder.append(";參數optionType:"+optionType);							}							parame = builder.toString();														MethodAction annotation = m									.getAnnotation(MethodAction.class);							// 方法描述							String methodDescp = annotation.optionDescription();							// 方法名稱							String name = annotation.methodName();														// 用戶IP地址							String ip = getIpAddr(request) == null ? null : getIpAddr(									request).trim();							AccountSysLog log = new AccountSysLog();							log.setOpenId(userOpenId);							log.setOptionDesc(methodDescp);							log.setOptionIp(ip);							log.setOptionMethod(name);							log.setOptionTime(new Date());							log.setParame(parame);							AccountSysLogService accountSysLogService =(AccountSysLogService) SpringContextUtil.getBean("accountSysLogService") ;							accountSysLogService.insert(log);						}				  }   			}								}		return point.proceed();	}	// 返回用IP地址	public String getIpAddr(HttpServletRequest request) {		String ip = request.getHeader(" x-forwarded-for ");		if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {			ip = request.getHeader(" Proxy-Client-IP ");		}		if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {			ip = request.getHeader(" WL-Proxy-Client-IP ");		}		if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {			ip = request.getRemoteAddr();		}		return ip;	}}3、spring-context.xml 切面類型配置

   <bean id="logAspect" class="aspect.AccountSysOptionLogAspect"/>     <aop:config>		<aop:aspect ref="logAspect">			<aop:pointcut id="logPointCut" expression="execution(* com.wlsq.kso.web.*.*(..))"/>			<aop:around pointcut-ref="logPointCut" method="doSystemLog"/>		</aop:aspect>	</aop:config>  通過上面的配置,我們可以清楚知道切入點:com.wlsq.kso.web 下所有控制類的方法。

                                                                 切面類:aspect.AccountSysOptionLogAspect

                                                                 切面方法:doSystemLog

4、切入目標控制層,相關注解配置


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼勒克县| 巨野县| 垣曲县| 宿州市| 乐至县| 商洛市| 延安市| 杨浦区| 额敏县| 侯马市| 盐池县| 九龙城区| 班戈县| 松原市| 普安县| 定州市| 福建省| 岱山县| 昌乐县| 福安市| 合江县| 石首市| 胶州市| 南溪县| 新津县| 河间市| 肥乡县| 西安市| 泰兴市| 武平县| 巫山县| 亚东县| 新昌县| 南溪县| 柘城县| 永仁县| 如东县| 黑水县| 望江县| 益阳市| 梨树县|