Struts 2中的自定义日志拦截器,带有bean值

时间:2014-06-24 10:01:25

标签: java struts2 customization interceptor actioncontext

我正在为审计日志目的编写一个自定义拦截器。 我想在拦截器中获取会话属性和请求属性。 例如:我会将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";
}

此请求属性是requestaware obj。 但是这个审计bean我无法检索到拦截器,请对此有所帮助。

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

实现这样的会议。

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

上面我无法检索请求参数。 它显示了JSP请求参数,但不是我已经开始实施。

2 个答案:

答案 0 :(得分:0)

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

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

或使用替代语法

Map requestAttributes = (Map) ActionContext.getContext().get("request"); 

答案 1 :(得分:0)

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

 HttpServletRequest request = ServletActionContext.getRequest();

但是如果要实现设置到操作中的requestattribute,则需要在调用后检索该操作。 e.g。

 String result =  invocation.invoke();

之后

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

然后请求对象不会为null,您也将获得该值。