1

我正在为审计日志目的编写一个定制的拦截器。我想在拦截器中获取会话属性和请求属性。

例如:我将Username进入会话并且我也正在接受。

但挑战是:我将一个 bean 定义为审计 bean,我在其中为 bean 设置一些值

if (this.userName.equals("admin")) {
    user.setUserName(this.userName);
    sessionAttributes.put("USER", user);
    auditBean.setPerm("login success");
    requestAttributes.put("auditBean", auditBean);
    return "success";
} else {
    auditBean.setPerm("Login Failed initiaqlized");
    requestAttributes.put("auditBean", auditBean);
    addActionError(getText("error.login"));
    
    return "error";
}

这个请求属性是ServletRequestAwareobj。但是我无法将这个审计 bean 检索到拦截器中,请对此提供帮助。

Map<String, Object> sessionAttributes = invocation.getInvocationContext().getSession();

实现这样的会话。

Map<String, Object> requestAttributes = invocation.getInvocationContext().getParameters();

上面我无法检索请求参数。它显示了 JSP 请求参数,但不是我设置的。

4

2 回答 2

0

我得到了答案。这是检索请求对象的替代方法

 HttpServletRequest request = ServletActionContext.getRequest();

但是,如果您想实现设置到操作中的请求属性,则需要在调用后检索该属性。例如

 String result =  invocation.invoke();

在这之后

AuditBean auditBean2=(AuditBean) request.getAttribute("auditLogs");

那么请求对象不会为空,你也会得到这个值。

于 2014-06-26T10:26:01.027 回答
0

您可以检查拦截器中的调用上下文是否是您的操作上下文,然后直接从上下文映射中获取它。

Map<String, Object> requestAttributes = (Map<String, Object>) invocation.getInvocationContext().get("request");

或使用替代语法

Map requestAttributes = (Map) ActionContext.getContext().get("request"); 
于 2014-06-24T11:39:11.473 回答