0070 过滤器调用Spring的bean操作数据库
假设有这样的需求:将用户每次请求的ip、时间、请求、user-agent存入数据库,很明显可以用过滤器实现,在过滤器中获取到这些数据调用mybatis的mapper存入数据库,但问题来了:mybatis的映射接口规则自动生成的Dao实现类存在于Spring容器中,在filter中如何才能注入或者调用呢?
首先是web.xml配置
<filter>
<!-- 注意下面这个过滤器名称要跟下面的spring-context.xml的相同 -->
<filter-name>myRequestLogFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>myRequestLogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
写filter
package net.sonngdemo.wms.util;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.*;
import java.io.IOException;
/**
* Created by Administrator on 2017/7/3.
*/
public class ReqeustFilter implements Filter {
@Autowired
private RequestFilterInSpring requestFilterInSpring; /*注入下面的Spring容器中的bean,实现了具体的过滤器方法*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
requestFilterInSpring.filter(request,response); //具体的过滤规则写在下面一个类中
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
配置Spring-context.xml
<bean name="myRequestLogFilter" class="net.sonngdemo.wms.util.ReqeustFilter" ></bean>
<!-- 注意这个bean的name要跟上面的web.xml中的名称相同 -->
写一个Spring Bean,具体实现过滤器方法
package net.sonngdemo.wms.util;
import net.sonngdemo.wms.dao.RequestLogMapper;
import net.sonngdemo.wms.domain.RequestLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/**
* Created by Administrator on 2017/7/3.
*/
@Component("requestFilterInSpring") /*注意名称跟上面过滤器中注入的名称相同*/
public class RequestFilterInSpring {
@Autowired
private RequestLogMapper requestLogMapper; /*注入mapper实现类*/
public void filter(ServletRequest request,ServletResponse response){ /*具体实现过滤器方法*/
HttpServletRequest httpRequest=(HttpServletRequest)request;
String uri=httpRequest.getRequestURI();
String regex = "/wms/(css|errorPage|fonts|js|media)/.*";
if (!uri.matches(regex)) {
RequestLog requestLog=new RequestLog();
requestLog.setIp(request.getRemoteHost());
requestLog.setDate(new Date());
requestLog.setRequest(uri);
requestLog.setUserAgent(httpRequest.getHeader("user-agent"));
requestLogMapper.insertLog(requestLog);
}
}
}
其他mapper略
总结:
- web.xml中配置一个过滤器代理
- 写一个过滤器实现Filter接口,通过调用Spring容器中的bean来实现过滤方法
- 在Spring配置文件中,创建该过滤器的bean对象,注意该该bean的名称要跟web.xml中的名称相同
- 写一个bean,具体实现过滤方法,用@component注解
0070 过滤器调用Spring的bean操作数据库的更多相关文章
- 使用Spring简化JDBC操作数据库
Spring的开发初衷是为了减轻企业级开发的复杂度,其对数据库访问的支持亦如此,使用Spring访问数据库能带来以下好处: 1.1 简化代码 使用原生的JDBC访问数据库,一般总是要执行以下步 ...
- 整合spring boot时操作数据库时报错Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.B
原文:https://blog.csdn.net/u__f_o/article/details/82756701 一般出现这种情况,应该是没有扫描到对应的mapper包,即在启动类下配置MapperS ...
- spring框架学习之--数据库操作增删改查
基于spring的NamedParameterJdbcTemplate操作数据库 首先在 resources 文件夹下添加数据库配置文件jdbc.properties 配置常用的数据库信息 consu ...
- Spring入门(十五):使用Spring JDBC操作数据库
在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...
- 170630、springboot编程之普通类中调用spring管理的bean对象
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...
- Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.如何实现事物控制.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/c ...
- Spring Boot实战之数据库操作
上篇文章中已经通过一个简单的HelloWorld程序讲解了Spring boot的基本原理和使用.本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是Jdb ...
- Spring Boot(二):数据库操作
本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate,第二种是JPA,第三种是Mybatis.之前已经提到过,本系列会以一个博客系统 ...
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...
随机推荐
- ECMA-262,第 5 版 最新 JavaScript 规范
ECMA-262,第 5 版 最新 JavaScript 规范 Rob Larsen, 界面架构师, IBM 简介: 了解 ECMAScript 规范的历史,查看它的众多重要新特性和新概念. 发布日期 ...
- java笔试题(5)
1.Comparable和Comparator接口是干什么的?列出它们的区别. Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它 ...
- 如何修改Git commit的信息
原文地址: http://xiguada.org/change-git-commit-message Git cimmit信息push后,如何修改,amend可以修改最后一次commit信息,但对 ...
- HDU2089 ------不要62(数位dp)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 在centOS上安装VNC
步骤如下: 1.搜寻VNC Server [root@msg45 wasliberty]# yum search tigervnc-serverLoaded plugins: fastestmirro ...
- (剑指Offer)面试题39:判断平衡二叉树
题目: 输入一课二叉树的根结点,判断该树是不是平衡二叉树.如果二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 思路: 1.重复遍历结点 参考上一题求二叉树的深度,先求出根结点 ...
- Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)
在使用Oracle spatial做空间查询和展示时,经常会遇到展示或者查询过慢,这时候我可以通过空间数据抽稀来优化查询展示效率. 在Oracle spatial中的抽稀函数为:SDO_UTIL.SI ...
- C#基础视频教程3.1 常见控件类型和使用方法
可以从左侧的工具箱中找到常见的控件(你要在Form1这种窗体上) 为了方便你也可以把工具箱整个拖过去,这样从上到下控件都给你排好了 对于按钮来说,最常见的就是他的背景颜色,文字,字体,还有是否 ...
- PHP如何安装和配置Zend Studio
1 网上下载该软件,安装之后关闭三个东西 2 新建一个本地的PHP项目 3 展开左侧的资源树,发现多了一个PHP的相关东西 4 右击"基础知识",新建一个PHP文件并输入以下代码 ...
- SpringMVC中使用-sqljdbc4.jar
昨天将现在写的Web项目中的数据库由MySQL换成SQLServer,昨天想把MySQL重新安装一下,但是由于不明原因,导致无法安装. 卸载MySQL.删除安装文件.删除注册表.重启电脑.但是安装的时 ...