Spring Cloud 指定包、类、方法名实现AOP切片登陆记录统计功能

标签: java
2人阅读 评论(0) 收藏 举报
分类:

1. 所需 jar 包:

<!--tools-->
<properties>
    <commons.collections4.version>4.1</commons.collections4.version>
    <commons.lang3.version>3.4</commons.lang3.version>
    <dom4j.version>1.6.1</dom4j.version>
</properties>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>${commons.collections4.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>${commons.lang3.version}</version>
</dependency>
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>${dom4j.version}</version>
</dependency>

2. 代码:

package com.dmap.auth.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@Aspect
@Component
public class LoginHistoryV1Aop {

    //只匹配 api 包中以下 5 个类中的以 ogin 结尾的方法
    @Pointcut("execution(public * com.dmap.auth.controller.api.LoginController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.QQController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.WechatController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.WeboController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.LenovoController.*ogin(..))")
    public void loginHistoryLog() {
        //Do nothing in this method.
    }

    @AfterReturning(pointcut = "loginHistoryLog()", returning = "object")
    public void doAfterReturning(JoinPoint joinPoint, Object object) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request;
        String tempIp = "";
        if (attributes != null) {
            request = attributes.getRequest();
            if (request != null) {
                tempIp = request.getRemoteAddr();
            }
        }
        String ip = tempIp;//获得 ip 地址
        Object value = object; //object 是切片所拦截的方法的返回值
        String classMethod = joinPoint.getSignature().getName();//获得调用的方法名称
    }

}

查看评论

在VC中实现程序在启动时隐藏

    最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。    对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.s...
  • AttaBoy
  • AttaBoy
  • 2002-03-03 09:18:00
  • 1205

从头认识Spring-3.6 简单的AOP日志实现(注解版)-需要记录方法的运行时间

这一章节我们把前面的第二个章节使用注解的形式来展示。1.domain蛋糕类:package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_6;...
  • raylee2007
  • raylee2007
  • 2016-02-22 22:53:17
  • 2520

Spring3系列10- Spring AOP——Pointcut,Advisor拦截指定方法

Spring3系列10- Spring AOP——Pointcut,Advisor拦截指定方法 Spring3系列10- Spring AOP——Pointcut,Advisor     上...
  • evilcry2012
  • evilcry2012
  • 2015-10-17 09:53:41
  • 1805

Spring AOP实践--记录类方法执行时间

网上有许多关于记录方法执行时间的帖子,但是看了一下,基本上操作不方便,或者都是开发测试性质的不太适用,我在这里做了完善,直接内置到项目中,使用的时候只需要在方法上添加注解@MethodLog即可,非常...
  • junehappylove
  • junehappylove
  • 2016-12-09 15:51:21
  • 1991

SpringCloud(第 048 篇)使用AOP统一处理Web请求日志

SpringCloud(第 048 篇)使用AOP统一处理Web请求日志-一、大致介绍1、AOP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,比如...
  • YLIMH_HMILY
  • YLIMH_HMILY
  • 2017-10-21 14:38:56
  • 1292

Spring aop 注解方式怎么获得执行了目标的某个方法?

private void beforeTransationHandle(JoinPoint point) throws Exception{ //拦截的实体类 Object target = ...
  • sxg0205
  • sxg0205
  • 2014-11-24 17:43:11
  • 1092

spring AOP计算service运行时间

/**  *   */ package com.dtm.log; import java.net.InetAddress; import org.aspectj.lang.Proce...
  • zhuixunhebe1
  • zhuixunhebe1
  • 2014-07-17 13:23:24
  • 1002

使用Spring AOP添加统计时间的功能

Spring提供了4种实现AOP的方式: 1.经典的基于代理的AOP 2.@AspectJ注解驱动的切面 3.纯POJO切面 4.注入式AspectJ切面 这里讲如何使用@AspectJ注解驱...
  • tiantang_1986
  • tiantang_1986
  • 2016-09-30 09:43:30
  • 798

像@Transactional一样利用注解自定义aop切片

在spring中,利用@Transactional注解可以很轻松的利用aop技术进行事物管理。在实际项目中,直接利用自定义注解实现切片可以大大的提高我们的编码效率以及代码的简洁性。实现以上的目标,主要...
  • qq1013598664
  • qq1013598664
  • 2017-04-23 11:18:38
  • 496

spring aop 实现用户操作日志记录功能

LogAspect.javapackage com.yangjf.commons; import java.lang.reflect.Method; import java.util.Date; ...
  • qq_27242475
  • qq_27242475
  • 2016-04-14 15:41:22
  • 5016
    个人资料
    等级:
    访问量: 88
    积分: 57
    排名: 166万+
    文章分类
    文章存档