B/S项目登录用户信息存储 一个小型的WEB项目,在SERVICE层用AOP做日志,所以需要获取到用户登录的信息,这个信息该存储在什么地方?(Session?在SERVICE层该怎么取?) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 struts2可以去到session的!spring中的话 貌似不知道!等待高人解答 取出用户信息,往SERVICE层中传参数 package com.frame.util.advice;import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.frame.session.SessionObject;import com.frame.session.SessionUtils;import com.heli.system.log.model.ASysOperateLog;import com.heli.system.log.service.OperateLogService;/** * @describtion: 系统操作日志增强 * * @author : lhqheli (email: [email protected]) * @date : 2013-3-28 下午11:30:00 */public class LogAdvice implements MethodInterceptor{ @Autowired private OperateLogService operateLogService; @Override public Object invoke(MethodInvocation invocation) throws Throwable { ASysOperateLog operateLog = new ASysOperateLog(); try { HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); SessionObject sessionObj = SessionUtils.getSessionInfo(request); if(sessionObj != null){ operateLog.setOperateUser(sessionObj.getLoginName()); operateLog.setOperateOrg(sessionObj.getOrgId()); } operateLog.setOperateIp(request.getRemoteAddr()); operateLog.setRequestUri(request.getRequestURI()); operateLog.setOperateTime(new Date()); operateLog.setDescription("调用了:"+invocation.getThis().getClass().getName() +"." + invocation.getMethod().getName()+"()"); String argsToString = ""; for(Object arg : invocation.getArguments()){ if(arg != null){ argsToString += (arg.toString() +" || "); } } operateLog.setMethodArgs(argsToString); //调用执行方法 Object obj =invocation.proceed(); operateLog.setReturnValue(obj == null?"":obj.toString()); return obj; } catch (Exception e) { e.printStackTrace(); operateLog.setExceptionMsg(e.getMessage()); throw e; }finally{ //记录日志信息 operateLogService.saveOperateLog(operateLog); } } }HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();只需要在web.xml中配置下面的代码就可以用上面获取request<!-- 配置后,可直接在springMVC中获取request对象 ,示例见系统操作日志advice方法获取request--> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> 4楼朋友的方法确实可以,其实我想问的是这么取合适吗?就是在SERVICE层去操作SESSION,这样实现SessionAware接口也可以吗? 在service层用request.getParameterByName("");这样就可以。注意request是HttpServlet 1、存在session中 2、当作service的一个参数 从action中传过去 传参数比较麻烦,提供一个set跟get登陆信息的静态方法好一些 穿参数我感觉也不好,"提供一个set跟get登陆信息的静态方法好一些"这个什么意思,能说的详细些么 新手求助 关于webservice的 高分急问一个问题,我的JSP修改保存了,为什么运行还是以前的? JSP报错,找不到符号了!高手们指教一下啊 可否直接使用Java调用flex程序 首页调用的js是怎么实现的? weblogic中调用DLL出错? JS关于关闭另一个JSP页面,如果能得到帮助,本人将不甚感谢。初来乍到,没有积分,还忘谅解。 为什么只有include来的文件出现乱码?? JAVA SERVLET 和 Applet 的 难题!高分相送!!!!!(急!)! jforum单点登录为管理员身份 如何动态改变JSP<title>
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import com.frame.session.SessionObject;
import com.frame.session.SessionUtils;
import com.heli.system.log.model.ASysOperateLog;
import com.heli.system.log.service.OperateLogService;/**
* @describtion: 系统操作日志增强
*
* @author : lhqheli (email: [email protected])
* @date : 2013-3-28 下午11:30:00
*/
public class LogAdvice implements MethodInterceptor{
@Autowired
private OperateLogService operateLogService;
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
ASysOperateLog operateLog = new ASysOperateLog();
try {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
SessionObject sessionObj = SessionUtils.getSessionInfo(request);
if(sessionObj != null){
operateLog.setOperateUser(sessionObj.getLoginName());
operateLog.setOperateOrg(sessionObj.getOrgId());
}
operateLog.setOperateIp(request.getRemoteAddr());
operateLog.setRequestUri(request.getRequestURI());
operateLog.setOperateTime(new Date());
operateLog.setDescription("调用了:"+invocation.getThis().getClass().getName()
+"." + invocation.getMethod().getName()+"()");
String argsToString = "";
for(Object arg : invocation.getArguments()){
if(arg != null){
argsToString += (arg.toString() +" || ");
}
}
operateLog.setMethodArgs(argsToString);
//调用执行方法
Object obj =invocation.proceed();
operateLog.setReturnValue(obj == null?"":obj.toString());
return obj;
} catch (Exception e) {
e.printStackTrace();
operateLog.setExceptionMsg(e.getMessage());
throw e;
}finally{
//记录日志信息
operateLogService.saveOperateLog(operateLog);
}
}
}
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();只需要在web.xml中配置下面的代码就可以用上面获取request
<!-- 配置后,可直接在springMVC中获取request对象 ,示例见系统操作日志advice方法获取request-->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
这样就可以。注意request是HttpServlet
2、当作service的一个参数 从action中传过去