springboot-切面

以下是一个使用切面方法获取客户访问文章信息的案例,包括客户地址、访问的方法和传入的参数。请注意,以下代码是一个简化的示例,仅用于说明概念。
创建一个注解类

AccessLog,用于标记需要记录访问日志的方法:
javaCopy codeimport java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLog {
    // 可添加其他属性
}

创建一个切面类

AccessLogAspect,在其中编写切面方法来获取客户访问文章的信息:
javaCopy codeimport javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
@Component
public class AccessLogAspect {

    @Autowired
    private HttpServletRequest request;

    @Pointcut("@annotation(com.example.AccessLog)")
    public void accessLogPointcut() {
        // 定义切点,匹配所有使用 @AccessLog 注解的方法
    }

    @Before("accessLogPointcut()")
    public void logAccess(JoinPoint joinPoint) {
        // 获取客户地址
        String clientAddress = request.getRemoteAddr();

        // 获取访问的方法名
        String methodName = joinPoint.getSignature().getName();

        // 获取传入的参数
        Object[] args = joinPoint.getArgs();

        // 记录日志或进行其他操作
        System.out.println("Client Address: " + clientAddress);
        System.out.println("Method Name: " + methodName);
        System.out.println("Arguments: " + Arrays.toString(args));
    }
}

在需要记录访问日志的方法上添加
@AccessLog 注解:
javaCopy code@Service

public class ArticleService {

    @AccessLog
    public void viewArticle(String articleId) {
        // 方法实现
    }

    // 其他方法...
}

在上述代码中,AccessLogAspect 类是切面类,通过 @Aspect 注解标记为一个切面。其中,accessLogPointcut() 方法定义了切点,匹配所有使用 @AccessLog 注解的方法。在 logAccess() 方法中,通过 request.getRemoteAddr() 获取客户地址,通过 joinPoint.getSignature().getName() 获取访问的方法名,通过 joinPoint.getArgs() 获取传入的参数。
在需要记录访问日志的方法上添加 @AccessLog 注解即可触发切面方法的执行。
请注意,上述代码中需要使用 HttpServletRequest 对象来获取客户地址,因此需要将其注入到 AccessLogAspect 类中。在实际应用中,可能还需要根据需要调整和补充切面方法的逻辑和日志记录方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天是什么日子 父亲节前一天 起床:5:10 就寝:22 :30 天气: 多云,转阴 出门时下着小雨 心情:矛盾转...
    铭悦阅读 1,063评论 0 0
  • 返回目录[https://github.com/GrowingGit/GitHub-Chinese-Top-Cha...
    wgl0419阅读 2,839评论 0 0
  • 心理咨询师应必备哪些技能? 心理咨询师是一种专业的职业,需要具备多方面的技能,以便能够为客户提供高质量的服务。以下...
    欣欣q阅读 421评论 0 0
  • 日精进 【早上好#淑萍#20230617日精进347】 前天因为想着自己拉不到心,好像找不到新的方法,所以觉得自己...
    石淑萍阅读 583评论 0 0
  • 今天是什么日子起床:6: 36就寝:10:30天气:晴心情:一般纪念日:无 总目标:学习网盘课程,阅读电子书籍 目...
    Lily17阅读 1,243评论 0 1

友情链接更多精彩内容