第一步:编写自定义注解
@Target({ElementType. METHOD}) @Retention(RetentionPolicy.RUNTIME ) @Documented public @interface JpfLog { String moduleName(); //模块名称 String logType(); //日志类别 String desc() default "无描述信息" ;// }
@Aspect @Component public class LogAspect { @Autowired private JFLogService jFLogService; //标注该方法体为后置通知,当目标方法执行成功后执行该方法体 @AfterReturning("within(com.xxx.*.web..*) && @annotation(rl)") public void insertLogSuccess(JoinPoint jp, JpfLog rl){ String moduleName = rl.moduleName() ; String signature = jp.getSignature().toString(); //获取目标方法签名 String methodName = signature.substring(signature.lastIndexOf("." )+1, signature.indexOf("(")); JFLog jFLog = new JFLog(); jFLog.setId(CodeHelper. createUUID()); jFLog.setModuleName(moduleName); jFLog.setMethodName(methodName); jFLog.setExceptionContent( ""); jFLog.setLogType(rl.logType()); HttpServletRequest request=ContextHolderUtils. getRequest(); String broswer=BrowserUtils. checkBrowse(request); jFLog.setBroswer(broswer); jFLog.setOperateTime( new Date()); jFLog.setUser(ResourceUtil. getSessionUserName()); String ip = oConvertUtils. getIpAddrByRequest(request); //如果访问路径为localhost,则获得的ip值为“0:0:0:0:0:0:0:1” if( "0:0:0:0:0:0:0:1".equals(ip)){ ip = "127.0.0.1"; } jFLog.setIp(ip); jFLog.setFlag(StringConstant. SUCCESS); jFLog.setRemark(rl.desc()); jFLogService.saveLog(jFLog); } //标注该方法体为异常通知,当目标方法出现异常时,执行该方法体 @AfterThrowing(pointcut= "within(com.xxx.*.web..*) && @annotation(rl)", throwing="ex") public void insertLog(JoinPoint jp, JpfLog rl, CRUDException ex){ String moduleName = rl.moduleName() ; String signature = jp.getSignature().toString(); //获取目标方法签名 String methodName = signature.substring(signature.lastIndexOf("." )+1, signature.indexOf("(")); JFLog jFLog = new JFLog(); jFLog.setId(CodeHelper. createUUID()); jFLog.setModuleName(moduleName); jFLog.setMethodName(methodName); jFLog.setExceptionContent(ex.getMessage()); jFLog.setLogType(rl.logType()); HttpServletRequest request=ContextHolderUtils. getRequest(); String broswer=BrowserUtils. checkBrowse(request); jFLog.setBroswer(broswer); jFLog.setOperateTime( new Date()); jFLog.setUser(ResourceUtil. getSessionUserName()); String ip = oConvertUtils. getIpAddrByRequest(request); //如果访问路径为localhost,则获得的ip值为“0:0:0:0:0:0:0:1” if( "0:0:0:0:0:0:0:1".equals(ip)){ ip = "127.0.0.1"; } jFLog.setIp(ip); jFLog.setFlag(StringConstant. ERROR); jFLog.setRemark(rl.desc()); jFLogService.saveLog(jFLog); } }
注:@AfterReturning为注解方法体成功执行后,执行的方法。@AfterThrowing为注解方法体抛出CRUDException 异常时执行的方法。JoinPoint jp参数可以获得注解方法体的相关值,包括类名、方法名、参数等信息。JpfLog rl参数为自定义注解的类,可以获得自定义注解的值。
第三步:Spring mvc配置文件
<!-- 启用@AspectJ支持,从而可以实现通过注解方式将通知编织到非公共方法中 --> <aop:aspectj-autoproxy />
第四步:自定义注解的使用
/** * 保存新增的人员 * @param modelMap * @param user * @return * @throws CRUDException * @throws Exception */ @JpfLog(moduleName="人员",logType=StringConstant. Log_Type_INSERT,desc= "") @RequestMapping(value = "/saveByAdd") public ModelAndView saveUserByAdd(ModelMap modelMap, User user) throws CRUDException { userService.saveUser(user); return new ModelAndView(StringConstant. ACTION_DONE, modelMap); }
相关推荐
日志表:使用aop拦截实现 权限控制:基于token方式,禁用session 对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂...
Spring MVC的常用注解 @Controller @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController Spring MVC的基本配置 静态资源映射 拦截器配置 @ControllerAdivce ...
注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
关闭Spring MVC DispatcherServlet vii. 65.7. 关闭默认的MVC配置 Spring Boot参考指南 7 viii. 65.8. 自定义ViewResolvers v. 66. 日志 i. 66.1. 配置Logback ii. 66.2. 配置Log4j i. 66.2.1. 使用YAML或JSON配置...
演示示例:demo.hsweb.me测试用户:test (test2,test3,test4....) 密码:123456演示项目源码:hsweb-demo技术选型第三方:MVC:spring-boot. 开箱即用,学习成本低,部署方便(main方法运行).ORM:mybatis. 配置灵活,简单方便...
Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...
Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...