我正在编写一个用于审计日志目的的自定义拦截器。我想在拦截器中获得会话属性和请求属性。
例如: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");
则请求对象将不为空,您也将获得值