我正在编写一个用于审计日志目的的自定义拦截器。 我想在拦截器中获取 session 属性和请求属性。
例如:我将设置 Username
进入 session ,我也在参加。
但挑战是:我将一个 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
对象。
但是我无法将该审计 bean 检索到拦截器中,请对此提供帮助。
Map<String, Object> sessionAttributes = invocation.getInvocationContext().getSession();
像这样实现 session 。
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");
关于java - Struts 2 中带有 bean 值的自定义日志记录拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383711/