SpringMVC中拦截器的使用
2017-12-18 12:05
656 查看
SpringMVC中的拦截器(Interceptor)主要是拦截用户的请求并进行相应的处理。今天主要梳理的是权限的验证,判断用户的登陆状态,是否需要认证。
♦两张小心翼翼的图
1、Interceptor的实现方法
2、对于PreHandle这3个方法:
好了,基础概念就介绍到这里,给大家推荐一个详细解读的博客.点我。
♦今天的业务需求:
代码实现:
1、配置一个公开地址的配置文件
2、拦截器
3、在配置文件中配置
小结:
有人问到过滤器和拦截器的区别,我也梳理一下,过滤器是依赖于servlet容器(struts),在实现上基于函数回调,可以对几乎所有的请求进行过滤。但缺点是一个过滤器实例只能在容器初始化时调用一次,来进行过滤操作,获得我们想要的数据。
拦截器是依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于java的反射机制,属于面向切面编程(AOP)的一种应用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作。同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
推荐博客。点我。
♦两张小心翼翼的图
1、Interceptor的实现方法
2、对于PreHandle这3个方法:
好了,基础概念就介绍到这里,给大家推荐一个详细解读的博客.点我。
♦今天的业务需求:
代码实现:
1、配置一个公开地址的配置文件
login.action=\u7528\u6237\u767b\u9646
2、拦截器
public class LoginInterceptor implements HandlerInterceptor { //用于用户认证校验、用户权限校验 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //得到请求的url String url = request.getRequestURI(); //判断是否是公开 地址 //实际开发中需要公开 地址配置在配置文件中 //从配置中取逆名访问url List<String> open_urls = ResourcesUtil.gekeyList("anonymousURL"); //遍历公开 地址,如果是公开 地址则放行 for(String open_url:open_urls){ if(url.indexOf(open_url)>=0){ //如果是公开 地址则放行 return true; } } //判断用户身份在session中是否存在 HttpSession session = request.getSession(); ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser"); //如果用户身份在session中存在放行 if(activeUser!=null){ return true; } //执行到这里拦截,跳转到登陆页面,用户进行身份认证 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); //如果返回false表示拦截不继续执行handler,如果返回true表示放行 return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("HandlerInterceptor1...postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("HandlerInterceptor1...afterCompletion"); } }
3、在配置文件中配置
<mvc:interceptors> <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> <bean class="com.host.app.web.interceptor.AllInterceptor"/> <mvc:interceptor> <mvc:mapping path="/test/number.do"/> <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> <bean class="com.host.app.web.interceptor.LoginInterceptor"/> </mvc:interceptor>
<mvc:interceptor> <!-- 授权拦截 --> <mvc:mapping path="/**" /> <bean class="cn.itcast.ssm.controller.interceptor.PermissionInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
小结:
有人问到过滤器和拦截器的区别,我也梳理一下,过滤器是依赖于servlet容器(struts),在实现上基于函数回调,可以对几乎所有的请求进行过滤。但缺点是一个过滤器实例只能在容器初始化时调用一次,来进行过滤操作,获得我们想要的数据。
拦截器是依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于java的反射机制,属于面向切面编程(AOP)的一种应用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作。同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
推荐博客。点我。
相关文章推荐
- SpringMVC拦截器的使用
- SpringMVC的拦截器的使用
- SpringMVC-拦截器的配置与使用
- springMvc源码学习之:spirngMvc的拦截器使用
- SpringMVC拦截器简单使用
- SpringMvc使用拦截器实现登录认证
- springmvc的拦截器使用
- springMVC --拦截器详细,使用和自定义拦截器
- SpringMVC学习记录(七)--拦截器的使用
- SpringMVC中使用Interceptor处理器拦截器
- SpringMVC中使用拦截器
- springmvc里使用注解进行拦截器配置
- 使用SpringMVC拦截器做一个简单的权限控制
- SpringMVC拦截器的使用详解
- 在SpringMVC中使用HandlerInterceptor来实现拦截器功能
- springmvc拦截器与web组件filter使用的粗浅认识
- SpringMVC拦截器使用时基本分析
- SpringMVC拦截器简单使用
- springmvc使用拦截器
- SpringMvc登陆拦截器的基本使用