关于拦截器实现日志存储到db的代码调试
问题是,原来系统有日志操作的代码,但日志最终没有存到数据库。
xml中拦截器配置:
<mvc:interceptor>
<mvc:mapping path="/admin/**" />
<bean id="logInterceptor" class="com.store.interceptor.LogInterceptor" />
</mvc:interceptor>
LogInterceptor:
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception
{
List<LogConfig> logConfigs = logConfigService.getAll();
if (logConfigs != null)
{
String path = request.getServletPath();
for (LogConfig logConfig : logConfigs)
{
if (antPathMatcher.match(logConfig.getUrlPattern(), path))
{
String username = adminService.getCurrentUsername();
String operation = logConfig.getOperation();
String operator = username;
String content = (String) request
.getAttribute(Log.LOG_CONTENT_ATTRIBUTE_NAME);
String ip = request.getRemoteAddr();
request.removeAttribute(Log.LOG_CONTENT_ATTRIBUTE_NAME);
StringBuffer parameter = new StringBuffer();
Map<String, String[]> parameterMap = request
.getParameterMap();
if (parameterMap != null)
{
for (Entry<String, String[]> entry : parameterMap
.entrySet())
{
String parameterName = entry.getKey();
if (!ArrayUtils.contains(ignoreParameters,
parameterName))
{
String[] parameterValues = entry.getValue();
if (parameterValues != null)
{
for (String parameterValue : parameterValues)
{
parameter.append(parameterName + " = "
+ parameterValue + "\n");
}
}
}
}
}
Log log = new Log();
log.setOperation(operation);
log.setOperator(operator);
log.setContent(content);
log.setParameter(parameter.toString());
log.setIp(ip);
logService.save(log);
break;
}
}
}
}
在LogInterceptor中的postHandle方法中,日志存储的代码是写在if(antPathMatcher.match(logConfig.getUrlPattern(), path))中。但logConfig.getUrlPattern()的路径无法和得到的path路径匹配。调试后发现,path始终为“”。
所以重点看path。path的定义为String path = request.getServletPath();
在网上查找资料后觉得这样写有问题。
如上文所述,request.getServletPath()得到的是web.xml里面写的servlet路径。如果web.xml里面写的是/*这样的通配符的话,就显示“”了吧。
不管怎样将String path = request.getServletPath()改为
String path =request.getRequestURI(); 运行正常。
The referenced article:
http://www.aiuxian.com/article/p-252688.html
关于拦截器实现日志存储到db的代码调试的更多相关文章
- struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置
1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...
- Feign 请求拦截器和日志
Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参 ...
- 使用spring拦截器实现日志管理
使用HandlerInterceptor拦截器,可以拦截请求,实现通用的日志管理操作 一.添加拦截器类 在"src/main/java"代码文件夹的"org.xs.dem ...
- 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力
源代码文件:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor ...
- Struts2学习笔记四:深入拦截器
一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...
- struts拦截器的使用
拦截器的使用 转自http://blog.csdn.net/woshisap/article/details/7271854 1:拦截器(Interceptor) 拦截器是Struts2最强大的特性之 ...
- 大数据学习——flume拦截器
flume 拦截器(interceptor)1.flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截 ...
- Struts2默认拦截器栈及内建拦截器使用具体解释
Struts2内建拦截器介绍: alias (别名拦截器):同意參数在跨越多个请求时使用不同别名,该拦截器可将多个Action採用不同名字链接起来,然后用于处理同一信息. autowiring ...
- struts2 基础5 OGNL、标签、四大域、默认拦截器说明
OGNL表达式 OGNL:对象导抗图语言 OGNL表达式是一个上下文的概念,上下文Map结构 OGNL表达式需要使用#标注命名空间.访问上下文(Context)中的对象需要使用#符号标注命名空间,如# ...
随机推荐
- Unix网络编程 -- ubuntu下搭建编译环境( 解决unp.h 编译等问题)
1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下载unpv13e http://ishare.i ...
- jquery 根据年 月设置报表表头
function setTblHeadr(thisTime){ $("#datatable_ajax1 thead").empty(); //获取星期 var weekday=ne ...
- java核心知识点学习----多线程间的数据共享和对象独立,ThreadLocal详解
线程内的数据共享与对象独立,举例:张三给李四转钱,开启A线程去执行转钱这个动作,刚好同时王五给赵六转钱,开启B线程去执行转钱,因为是调用的同样一个动作或者说对象,所以如果不能保证线程间的对象独立,那么 ...
- servlet实现的三种方式对比(servlet 和GenericServlet和HttpServlet)
第一种: 实现Servlet 接口 第二种: 继承GenericServlet 第三种 继承HttpServlet (开发中使用) 通过查看api文档发现他们三个(servlet 和GenericSe ...
- ini_set 设置php配置项 在windows和linux下的不同
在win下,当你要include多个路径的话,你要用“:”隔开,但在linux下就使用":"隔开的.. if (substr(php_uname(), 0, 7) == " ...
- hp小机定位网卡位置
rad已经被olrad取代 HPUX下定位网卡位置 一台HP小型机,可能配了多块网卡,在系统中以la ...
- Git常用命令(自己总是忘记,整理在这里)
1.git init 初始化一个空的git仓库 2.git clone +SSH地址 clone新的项目到本地 3.git add git add file 4.git commi ...
- 对比DOM和jQuery完善度
<input type="text" id="username" value="请输入你的用户名"> <script> ...
- 图层的transform属性
Main.storyboard // // ViewController.m // 7A11.图层的transform属性 // // Created by huan on 16/2/4. // ...
- Windows Phone 8.1商店启动协议
最近开发wp8.1已经两个月了,感觉坑不少,原来8时代的商店api多明了,微软不给封装就算了,至少你要在msdn上明显的地方标注下啊...................顺便在吐槽下bing,找了一个 ...