最近搭建一个ssh的通用架子时,想做个通用日志的拦截方法,可以利用反射获取拦截类中的属性
不多说,上代码
日志类
public class MyLog {
public void doBefore(JoinPoint jp) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = jp.getTarget().getClass().getDeclaredField("username");//获取属性-->Field
f.setAccessible(true);//如果是私有的 先要设置可访问
String user = (String) f.get(jp.getTarget());//获取值,这个get()方法重点是参数,参数是你要获取的类
logStr = user + " 进行了" + jp.getTarget().getClass().getName() + " 类的 "+ jp.getSignature().getName()+" 方法开始执行 ";logger.info(logStr);}
}
}
拦截类
com.xxx.xxx.controller包下的ServerManagerController.java
public class ServerManagerController extends BaseAction{
private String username = "";
@Autowired
/**
* 管理页面
* @return
*/
@RequestMapping(value = "/toServerManager")
public String toServerManager(){
UserLogInfo user = (UserLogInfo)session.getAttribute("userLogInfo");
this.username = user.getUsername();
return "/jsp/examine/serverManager";
}
}