- 浏览: 3420868 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://my.oschina.net/wnjustdoit/blog/603566
方式:
1、实现接口:org.springframework.web.servlet.HandlerInterceptor
2、继承抽象类:org.springframework.web.servlet.handler.HandlerInterceptorAdapter
spring配置文件:
全局拦截器:
或
拦截器类:
方式:
1、实现接口:org.springframework.web.servlet.HandlerInterceptor
2、继承抽象类:org.springframework.web.servlet.handler.HandlerInterceptorAdapter
spring配置文件:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/restapi/user/identifycode/**" /> <mvc:mapping path="/restapi/user/email/edit" /> <bean class="com.maijia.ucenter.rest.web.interceptors.IdentifyCodeInterceptor" /> </mvc:interceptor> </mvc:interceptors>
全局拦截器:
<mvc:interceptors> <bean class="com.app.mvc.MyInteceptor" /> </mvc:interceptors>
或
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <bean class="com.mvc.MyInteceptor"></bean> </list> </property> </bean>
拦截器类:
package com.caiya.ucenter.rest.web.interceptors; import java.util.Date; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.caiya.ucenter.rest.web.utils.ClientIpUtils; import com.caiya.cache.ICache; /** * 短信校验码拦截器,只允许60秒之后重发一次 * ADD 邮箱验证码 * 涉及找回密码 & 绑定邮箱 */ public class IdentifyCodeInterceptor extends HandlerInterceptorAdapter { @Resource private ICache cache; private static Logger logger = Logger.getLogger(IdentifyCodeInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getRequestURI(); String ip = ClientIpUtils.getClientIP(request); if(path.contains("/restapi/user/identifycode/sms")){ // 发送短信验证码 String mobile = request.getParameter("mobile"); if(cache.get(createCacheKey(mobile)) != null){ logger.error(new StringBuilder("ip:").append(ip).append(",mobile:").append(mobile).append(" 在1分钟内再次请求短信验证码,请求拒绝!")); throw new IllegalAccessException("短信验证码需在1分钟之后再次请求!"); } }else if(path.contains("/restapi/user/identifycode/email") || path.contains("/restapi/user/email/edit")){ // 发送邮箱验证码 String email = request.getParameter("email"); if(cache.get(createCacheKey(email)) != null){ logger.error(new StringBuilder("ip:").append(ip).append(",email:").append(email).append(" 在1分钟内再次请求邮箱验证码,请求拒绝!")); throw new IllegalAccessException("邮箱验证码需在1分钟之后再次请求!"); } } // ip另外限制 if(cache.get(createCacheKey(ip)) != null){ logger.error(new StringBuilder("ip:").append(ip).append(",ip:").append(ip).append(" 在1分钟内再次请求验证码,请求拒绝!")); throw new IllegalAccessException("验证码请求需在1分钟之后再次请求!"); } return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { String path = request.getRequestURI(); String ip = ClientIpUtils.getClientIP(request); if(path.contains("/restapi/user/identifycode/sms")){ // 发送短信验证码 String mobile = request.getParameter("mobile"); try{ // 一般1分钟过期,如果在preHandle中获取到这个缓存,那么不允许他继续下去 cache.set(createCacheKey(mobile), new Date(), 60); }catch(Exception e){ logger.error(e.getMessage(), e); } }else if(path.contains("/restapi/user/identifycode/email") || path.contains("/restapi/user/email/edit")){ // 发送邮箱验证码 String email = request.getParameter("email"); try{ // 一般1分钟过期,如果在preHandle中获取到这个缓存,那么不允许他继续下去 cache.set(createCacheKey(email), new Date(), 60); }catch(Exception e){ logger.error(e.getMessage(), e); } } // ip另外限制 try{ // 一般1分钟过期,如果在preHandle中获取到这个缓存,那么不允许他继续下去 cache.set(createCacheKey(ip), new Date(), 60); }catch(Exception e){ logger.error(e.getMessage(), e); } super.postHandle(request, response, handler, modelAndView); } private String createCacheKey(String address){ return new StringBuilder("ic_").append(address).toString(); } }
发表评论
-
Spring Boot 属性配置
2016-06-24 11:04 1181Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2025Spring Boot 集成MyBatis http://bl ... -
Spring MVC防重复提交
2016-06-17 15:47 1644http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2282http://my.oschina.net/simpleton ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12056使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1333http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1397http://blog.csdn.net/jackpk/art ... -
mvc:view-controller
2016-05-18 10:26 1081http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4101参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2286http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1620http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5522sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
Spring中使用注解 @Scheduled执行定时任务
2016-05-10 09:39 1566原文:http://dwf07223.blog.51cto.c ... -
Spring中配置Websocket
2016-05-05 16:55 1276spring+websocket整合(springMVC+sp ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1314集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4791使用Spring-data进行Redis操作 http://z ... -
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
2016-05-03 13:35 1060Spring4新特性——集成Bean Validation 1 ... -
SpringMVC介绍之Validation
2016-05-03 13:10 983SpringMVC介绍之Validation http://h ... -
spring 注解方式下使用commons-validator 验证表单
2016-05-03 11:08 3075原文: http://www.programgo.com/ar ... -
Spring MVC学习详解
2016-04-28 09:13 1003原文 http://blog.csdn.net/alsocod ...
相关推荐
下面将详细探讨Spring拦截器的使用以及高级参数绑定和Controller返回值的相关知识。 首先,我们创建一个Spring拦截器需要实现HandlerInterceptor接口或继承HandlerInterceptorAdapter抽象类。以下是一个简单的拦截...
在深入研究Flex-Spring拦截器时,理解Spring AOP的核心概念和AMF的工作原理是至关重要的。通过这样的集成,开发者可以在保持Flex客户端的灵活性和交互性的同时,利用Spring的强大功能来处理复杂的业务逻辑和系统管理...
Spring 拦截器是 Spring 框架中一个非常重要的组件,主要用于处理请求和响应,实现业务逻辑之前和之后的预处理和后处理。它为开发者提供了在 MVC 模式下实现统一处理机制的机会,比如权限验证、日志记录、性能监控等...
而Spring拦截器则是实现AOP的一种方式,它类似于Java的Servlet过滤器,可以在方法调用前后执行自定义的操作。 AOP拦截器在Spring中主要通过`HandlerInterceptor`接口或者`@AspectJ`注解来实现。下面我们将详细探讨...
本文将深入探讨Spring拦截器的一个简单实例,通过源码分析和实际操作,帮助你理解其工作原理。 首先,我们需要了解Spring MVC的处理流程。当一个HTTP请求到达服务器时,Spring MVC会按照配置的DispatcherServlet...
Spring 拦截器是 Spring AOP(面向切面编程)的一个重要组成部分,它允许开发者在方法调用前后插入自定义的行为。在这个简单的例子中,我们将深入理解如何配置和使用 Spring 的拦截器来实现特定的功能。 首先,我们...
在`intercept`方法中,我们实现了类似Spring拦截器的功能,调用`preHandle`和`postHandle`方法,并根据`preHandle`的结果决定是否执行目标方法。 最后,`afterCompletion`方法的调用通常需要手动管理,因为它涉及到...
在本次的“spring MVC(新增拦截器demo)”项目中,我们将重点探讨如何在Spring MVC中添加拦截器来实现对请求的预处理和后处理。 拦截器在Spring MVC中扮演着关键的角色,它们可以用来执行一些全局性的任务,如日志...
这将设置Spring Web相关类的日志级别为DEBUG,以便我们能看到拦截器的执行过程。 启动类通常会包含`@SpringBootApplication`注解,该注解包含了`@EnableAutoConfiguration`,`@ComponentScan`和`@...
Spring Boot提供了对Spring MVC的集成,因此我们可以利用Spring MVC的拦截器机制来实现这些功能。 首先,让我们了解一下Spring Boot中创建拦截器的基本步骤: 1. 创建自定义拦截器类:你需要创建一个实现了`...
Spring拦截器HandlerInterceptor接口代码解析 Spring拦截器HandlerInterceptor接口代码解析是Spring框架中的一种重要机制,它允许开发者在请求处理过程中执行自定义逻辑,以达到验证、日志记录、性能监控、安全检查...
在Spring Boot应用中,登录拦截器是一个至关重要的组件,它用于保护特定的Web资源,确保只有经过身份验证的用户才能访问。Spring Boot结合了Spring MVC框架,提供了方便的方式来实现这样的拦截器。本篇文章将深入...
### Spring AOP 四种创建通知(拦截器)类型详解 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了在应用代码中添加横切关注点的能力,如日志记录、事务管理、权限...
在Spring Boot中注册拦截器,我们需要在配置类中使用`@EnableAspectJAutoProxy`开启AOP代理,并通过`@Bean`注解声明拦截器实例。然后,使用`@Around`注解定义切点,即拦截所有的JPA操作。 在实际开发中,为了使分库...
在Spring Boot应用中,拦截器(Interceptor)是Spring MVC框架的一部分,用于在请求处理之前、之后或在实际处理过程中执行一些预定义的任务。这通常包括权限检查、日志记录、性能监控等。自定义拦截器可以帮助我们更...
标题中的“spring配置JSON拦截器VIEW”指的是在Spring框架中设置JSON数据的处理方式,特别是通过拦截器(Interceptor)来优化视图层(View)的响应。在Web开发中,拦截器是一种常用的机制,用于在请求被实际处理之前...
Spring MVC拦截器是Spring Web框架的一个重要组成部分,它允许开发者在处理请求之前或之后执行自定义的操作,例如权限校验、日志记录等。在本篇文章中,我们详细探讨了如何通过Spring MVC拦截器实现session的控制,...
3. **Spring集成**:在Spring3.2中,我们可以使用`<cxf:bus>`和`<cxf:interceptor>`标签将自定义拦截器注册到CXF Bus中。这样,Spring容器会管理拦截器的生命周期,并在需要时注入其他依赖。 4. **拦截器链**:CXF...
在SpringBoot框架中,拦截器是一个非常重要的组件,它能够在请求到达控制器(Controller)之前或者之后对请求进行拦截,以完成一些预处理或后处理操作。拦截器通常用于权限检查、日志记录、性能监控等场景。 拦截器...
### 使用Spring拦截器实现日志管理实例 在Web应用程序中,日志管理是至关重要的,它可以帮助开发者跟踪和诊断系统中的问题。Spring框架提供了一种优雅的方式来实现这一目标,即通过使用`HandlerInterceptor`接口...