gpt4 book ai didi

java - JEE : how to pass parameter to an interceptor

转载 作者:行者123 更新时间:2023-11-30 08:32:19 28 4
gpt4 key购买 nike

在我的 JEE 应用程序中,在 glassfish 3 上运行,我遇到以下情况:

MyFacade 类

@Interceptors(SomeInterceptor.class)
public void delete(Flag somethingForTheInterceptor, String idToDelete) {
.......
}

@Interceptors(SomeInterceptor.class)
public void update(Flag somethingForTheInterceptor, MyStuff newStuff) {
.......
}

变量somethingForTheInterceptor没有用在这些方法中,它只用在拦截器中:

一些拦截器类

@AroundInvoke
public Object userMayAccessOutlet(InvocationContext ctx) throws Exception {
Flag flag = extractParameterOfType(Arrays.asList(ctx.getParameters()), Flag.class);
// some checks on the flag
}

方法中没有使用的参数感觉不太好。是否有另一种方法可以将 somethingForTheInterceptor“发送”到拦截器?

更新:delete()update() 的调用者有不同的计算somethingForTheInterceptor 的方法多变的。这不是一个常数。计算它所需的信息在 REST 调用中。但是 2 个 REST 方法有不同的输入对象,所以注入(inject) http 请求是不够的。

这些是来电者:

MyResource 类

@DELETE
@Path("/delete/{" + ID + "}")
public Response delete(@PathParam(ID) final String id) {
Flag flag = calculateFlagForInterceptor(id);
facade.delete(flag, id);
}

@POST
@Path("/update")
@Consumes(MediaType.APPLICATION_JSON + RestResourceConstants.CHARSET_UTF_8)
public Response update(final WebInputDTO updateDetails) throws ILeanException {
Flag flag = calculateFlagForInterceptor(updateDetails);
facade.update(flag, convertToMyStuff(updateDetails));
}

我在想 - 资源中的方法是否有可能在某种上下文中设置标志,稍后可以将其注入(inject)拦截器?

最佳答案

在 Java EE 中,拦截器允许向方法添加预处理和后处理。所以,拦截器执行的上下文就是方法的上下文。

I was thinking - is it possible for the methods in the Resource to set the flag in some kind of Context, that can be later injected in the Interceptor?

Staless Service 应尽可能享有特权。因此,您应该避免在服务器上存储数据(ThreadLocal、Session 等)。

The information needed to calculate it is in the REST call.

为什么?Rest Controller 没有执行计算和逻辑的职责。

为了解决您的问题,您确定不能在拦截器中移动标志计算吗?通过增强拦截器的职责,您将不需要更长的时间来传递标志:

@AroundInvoke
public Object userMayAccessOutlet(InvocationContext ctx) throws Exception {
Flag flag = calculFlag(Arrays.asList(ctx.getParameters()));
// some checks on the flag
}

关于java - JEE : how to pass parameter to an interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40175173/

28 4 0