在struts2中使用bean值定制日志拦截器



我正在编写一个用于审计日志目的的自定义拦截器。我想在拦截器中获得会话属性和请求属性。

例如:I'll set Username into session and that I'll get too.

但挑战是:我正在定义一个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";
}

此请求属性是ServletRequestAware obj。但是这个审计bean我无法检索到拦截器,请帮助解决这个问题。

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

实现这样的会话。

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

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

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

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

或使用替代语法

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

我得到了答案。这是检索请求对象

的另一种方法
 HttpServletRequest request = ServletActionContext.getRequest();

但是如果您想要实现设置到操作中的requestattribute,则需要在调用后检索它。例如

 String result =  invocation.invoke();

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

则请求对象将不为空,您也将获得值

最新更新