struts2 日志拦截器

[size=xx-large][color=darkred][b]日志拦截器[/b][/color][/size]

[color=gray]要求:记录请求的IP、请求者、请求类名、方法名 [/color]
[color=darkred]1.struts.xml文件中配置拦截器[/color]
[color=brown]<struts>
<package name="package-default" extends="json-default" abstract="true">
<interceptors>
<!-- 登录拦截器-->
<interceptor name="loginInteception" class="org.cric.interceptor.LoginInterceptor" />
<!--日志拦截器-->
<interceptor name="loginfoInteception" class="org.cric.interceptor.LoginfoInterceptor" />
<!-- 定义一个拦截器栈 -->
<interceptor-stack name="myStack">
<!--拦截器-->
<interceptor-ref name="loginInteception">
<!--不需要拦截的请求 -->
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="loginfoInteception"/>
<!--默认拦截器-->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>


<default-interceptor-ref name="myStack" />
<global-results>
<result name="doLogin" type="redirect">/logincheck.jsp</result>
</global-results>
</package>

<include file="strutsXml/struts_*.xml"></include>
</struts> [/color]

[color=darkred] 2.拦截器类 扩展MethodFilterInterceptor,覆盖方法doIntercept
[/color]
[color=brown]package org.cric.interceptor;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.cric.model.Employee;
import org.cric.model.Loginfo;
import org.cric.service.LogService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

@SuppressWarnings("serial")
public class LoginfoInterceptor extends MethodFilterInterceptor{
private Loginfo log;
public Loginfo getLog() {return log;}
public void setLog(Loginfo log) {this.log = log;}

@Resource//依赖注入
private LogService logService;

private static String SESSIONKEY="adminSession";//设置session的key
static Logger logger=Logger.getLogger(LoginInterceptor.class);

HttpServletRequest request=ServletActionContext.getRequest();
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//请求IP
String employeeIp=request.getRemoteHost();
//请求的方法名
String actionName=invocation.getProxy().getActionName();
//请求的类以及包结构
String actionClass=invocation.getProxy().getClass().getName();
log.setLoginfoIp(employeeIp);
log.setLoginfoModule(actionClass);
log.setLoginfoRequest(actionName);

java.util.Map<String,Object>session=ActionContext.getContext().getSession();
Object object=session.get(SESSIONKEY);
//获取发起请求的员工名
if(object==null){//如果在没有登录的情况下 拦截的这个请求是登录请求 所以要从值栈 (Value Stack)中获取数据
String loginfoEmployee=(String)invocation.getStack().findValue("employee.employeeNickName");
log.setLoginfoEmployee(loginfoEmployee);
}else{//登录情况下的操作 直接从session中获得
Employee emp=(Employee)object;
log.setLoginfoEmployee(emp.getEmployeeNickName());
}
invocation.invoke();

logger.debug("进入日志拦截器");
logService.save(log);
return "doLogin";
}

}[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值