spring aop切面问题

jklot66 2010-09-26 05:27:18
现在项目需要做审计日志,记录客户每个操作痕迹。项目使用SSH的框架,在Action层引入切面实现。代码如下

@Before("execution(public * com.eto..*.*Action.* ())")
public void beforeMethod(JoinPoint jp){

// TODO Auto-generated method stub
logger.info(" beforeMethod invoke name:"+jp.getClass().getName());
logger.info(" beforeMethod invoke target:"+jp.getTarget().toString());
logger.info(" beforeMethod invoke kind:"+jp.getKind());
logger.info(" beforeMethod invoke Signature:"+jp.getSignature().getName());
logger.info(" beforeMethod invoke sourceLocation:"+jp.getSourceLocation().toString());
logger.info(" beforeMethod invoke getStaticPart:"+jp.getStaticPart().toString());
logger.info(" beforeMethod invoke args:"+((jp.getArgs() != null && jp.getArgs().length >0 ) ? jp.getArgs()[0].toString():"无"));
logger.info(" beforeMethod invoke this:"+jp.getThis().toString());
}



Action类

@Component("logicAction")
public class LoginAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
private HttpServletRequest request;

private HttpServletResponse response;

public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
request = arg0;
}

public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
response = arg0;
}


public String login(){
StringBuffer sb = new StringBuffer();
String operatorName = request.getParameter("userName");
String password = request.getParameter("password");
String userType = request.getParameter("userType");
.............
}

}


现在存在一个问题 action方法使用了struts2.0的架构,所有的action请求方法没有任何参数 JoinPoint对象不能获取到任何参数信息,现在需要通过request对象获取当前登录人信息及客户机ip等相关信息。在beforeMethod方法中如何获取容器的request对象?
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklot66 2010-09-28
  • 打赏
  • 举报
回复
ServlectActionContext这个可以么 我试试看 如果这个方法能用的话就太好了
keven_2008 2010-09-27
  • 打赏
  • 举报
回复
ServlectActionContext是使用threadlocal来维护的,只要一个请求发起就会初始化这个类。
在struts2范围内,可以放心使用。
keven_2008 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kick5578 的回复:]
引用 2 楼 keven_2008 的回复:

ServlectActionContext.getRequest();


在before里面也可以引用?
[/Quote]
可以,就好像你在action中用。
kick5578 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keven_2008 的回复:]

ServlectActionContext.getRequest();
[/Quote]

在before里面也可以引用?
蛋黄车 2010-09-27
  • 打赏
  • 举报
回复
在方法里尽量不依赖前端传参,使用形参,任何满足条件的数据都可以使用此方法。

我觉得你的问题应该是如何使用Struts2来获取页面传过来的参数吧,如果是这样的话,就是set注入的方法,可搜索下
keven_2008 2010-09-27
  • 打赏
  • 举报
回复
ServlectActionContext.getRequest();
jklot66 2010-09-27
  • 打赏
  • 举报
回复
有专家在么 帮个忙呀

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧