关于拦截器实现日志存储到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)中的对象需要使用#符号标注命名空间,如# ...
随机推荐
- laravel 数据库迁移
问题:之前有创建迁移文件 并且执行过 如果删除迁移文件 再重新创建迁移文件时就有问题 提示找不到之前的迁移文件 /** 一开始执行的命令 php artisan make:migration crea ...
- Linux程序包管理初步-yum的使用
何为yum? yum:由yellow dog研发,全称Yellowdog Update Modifier 是rhel系列系统上rpm包管理器的前端工具,可用来自动解决依赖关系,从而更好的实现程序包的安 ...
- iOS应用之微信支付集成-直接前端集成
所有信息的生成都在前端完成,包括对订单进行sign签名以及MD5签名加密(此方法相对来说有些复杂,没有官方给的方法简单).注:官方给的是v3&v4支付流程,签名和加密都是在服务器端进行,由于没 ...
- centos添加开机启动项目
centOS 配置开机自启动两种方式: 1.vi /etc/rc.d/rc.local 在此文件中加入启动的脚本 2.chkconfig 增加自己的脚本 --add --list --del 步骤: ...
- 技术英文单词贴--B
B breadcrumb 面包屑 bubble 冒泡
- Scrum会议10.20
Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 汪东涵 宫丽君 时间:2016.10.20 已完成内容: 1.理解项目和代码. 2.讨论新功能. 计划完成 ...
- table的css样式
经常会遇到table中各种线条重复的问题,画面会显得很难看,下面是解决问题的方法: <!Doctype html><html> <head> <meta ch ...
- 小甲鱼python视频弟十二讲(关于字符串的方法及注释下)
1,ljust(width[, fillchar]) width -- 指定字符串长度. fillchar -- 填充字符,默认为空格. 用法:返回一个原字符串左对齐,并使用空格填充至指定长度的新字 ...
- Linux常用命名
一:命名基本格式 [root@localhost ~]# root: 用户名 localhost: 主机名 (windows在局域网,不能有相同的主机名) ~:当前所在位置 (家目录) root ...
- python学习之路-day5-模块
本节内容: 模块详解 1.模块定义 2.os&sys模块 3.time&datetime模块 4.random模块 5.shutil模块 6.shelve模块 7.configpars ...