sách gpt4 ai đã đi

aop - 如何在 spring aop 中将上下文参数传递给建议

In lại 作者:行者123 更新时间:2023-12-01 14:59:18 66 4
mua khóa gpt4 Nike

我现在正在学习 spring aop,我不知道将上下文参数传递给建议。

请注意,我指的是 bối cảnh 参数,而不是 normal 参数。

传递普通参数很简单,例如:

a join point:
public void read(String something){

}

@Diện mạo
public class SessionAspect {
@Pointcut("execution(* *.*(String)) &&args(something)")
public void sess() {
}

@Before("sess()")
public void checkSessionExist(String something) {
//Here
}
}

Sau đó something 参数将被传递给通知 checkSessionExist.

但是我想获取 HttpSession 之类的上下文参数怎么样?

a join point:

public void listUser(){
dao.list(User.class,.....);
}

@Diện mạo
public class SessionAspect {
@Pointcut("execution(* *.*(String))")
public void sess() {
}

@Before("sess()")
public void checkSessionExist(String something) {
//Here
}
}

在此示例中,listUser 连接点仅允许登录用户使用。

所以我想检查当前HttpSession中是否有一个名称,所以我需要在提示checkSessionExist中获取一个HttpSession的实例。

但是如何获取呢?

最简单的方法是将 HttpSession 参数添加到所有的连接点,如下所示:

public void listUser(HttpSession session){
dao.list(User.class,.....);
}

然而,这违背了 AOP 本身。在我看来,连接点甚至不需要知道Aspect的存在,不是吗?

如何解决?

1 Câu trả lời

您可以在 @Diện mạo 本身中获取 HttpSession 引用,而不是通过 @Pointcuts chuyển khoản HttpSession

RequestContextHolder.currentRequestAttributes()
.getAttribute("user", RequestAttributes.SCOPE_SESSION)

@Diện mạo
public class SessionAspect {

// fetch the current HttpSession attributes and use as required
private ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();


@Pointcut("execution(* *.*(String))")
public void sess() {
}

@Before("sess()")
public void checkSessionExist(String something) {
//Here
}
}

关于aop - 如何在 spring aop 中将上下文参数传递给建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983796/

66 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com