我正在为审计日志目的编写一个自定义拦截器。
我想在拦截器中获取会话属性和请求属性。
例如:我会将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请求参数,但不是我已经开始实施。
答案 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,您也将获得该值。