关于拦截器实现日志存储到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)中的对象需要使用#符号标注命名空间,如# ...
随机推荐
- json 判断字段
1方式一 !("key" in obj) 方式二 obj.hasOwnProperty("key") //obj为json对象. 2获取不确定键的值 for( ...
- ProtoType(原型)-对象创建型模式
1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.动机 通过拷贝或者“克隆”一个类的实例来创建新的实例. 3.适用性 当一个系统应该独立于它的产品创建.构成和表示时,要使 ...
- 转贴 IT外企那点儿事完整版
转贴 IT外企那点儿事完整版 第一章:外企也就那么回儿事(http://www.cnblogs.com/forfuture1978/archive/2010/04/30/1725341.html) 1 ...
- 2016---ios面试题
1.对数组中的元素去重复 例如: 1 2 3 NSArray *array = @[@"12-11", @"12-11", @"12-11&q ...
- MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- c++实战吐槽(我还是太年轻了)
习惯了用java, 现在切换到c++遇到了一些很滑稽的问题, 特此记录. 一. 使用了野指针 都知道不能使用野指针, 指针定义后,要初始化为null, 我在项目里面默认构造函数里面确实初始化为null ...
- hibernate多表查询,结果封装在自己定义的一个实体类当中(在自己定义的类中增加构造函数)
hibernate的hql查询直接返回java对象时出现问题3 向大家请教一个问题,现在有三张表,表之间没有关联,我需要将三张表里面的所有东西查询出来存储到一个新的对象中,该如何实现,使用hibern ...
- jsp的9大对象
1.requset对象 主要用于接受客户端通过HTTP协议传送给服务器端的数据 request.getProtocal()获得客户使用协议 request.getServletPath ...
- css样式注意
CSS3 font-face定义的字体使用时有时候用引号,有时候不用,很奇怪,如 @font-face{ font-family: Roboto-Black; src: url('../package ...
- tomee.xml
部署 <?xml version="1.0" encoding="UTF-8"?> <tomee> <!-- see http:/ ...