扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么使用Spring MVC拦截器实现一个登录功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联是一家做网站、网站制作,提供网页设计,网站设计,网站制作,建网站,按需求定制制作,网站开发公司,自2013年创立以来是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。HandlerInterceptor接口
Spring MVC中的Interceptor拦截器拦截的请求是通过实现HandlerInterceptor接口来完成的。在Spring MVC中定义一个Interceptor拦截器非常简单,通过在要定义的Interceptor拦截器类中实现Spring的HandlerInterceptor接口,或是继承抽象类HandlerInterceptorAdapter。
HandlerInterceptor接口定义了三个方法,Spring MVC就是通过这三个方法来对用户的请求进行拦截处理的,下面对这三个方法进行具体的详解:
(1)boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handle)。顾名思义,这个方法将在请求处理之前被调用。Spring MVC中的Interceptor实行的是链式调用,即在一个应用中或者说在一个请求中可以同时存在多个Interceptor。每个Interceptor的调用会依据它的声明顺序依次执行,而且最先执行的是Interceptor中的preHandle方法,所以可以在这个方法中进行一些前置的初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是boolean类型的,当返回值为FALSE时,表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为TRUE时就会继续调用下一个Interceptor的preHandle方法;如果已经是最后一个Interceptor,就会调用当前请求的Controller方法。
(2)void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView mv)。该方法和之后的afterCompletion方法都只能在当前所属的Interceptor的preHandle方法的返回值为TRUE时才能被调用。postHandle方法,顾名思义,就是在当前请求被处理之后,也就是Controller方法被调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作。postHandle方法被调用的方向跟preHandle是相反的,也就是说先声明的Interceptor的postHandle方法反而会后执行,这和Struts2里面的Interceptor的执行过程类似。
(3)void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception exception)。 该方法也是在当前所属的Interceptor的preHandle方法的返回值为TRUE时才会执行。顾名思义,该方法将在这个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法的主要作用就是进行资源整理。
拦截器实现用户权限验证
本文将通过Spring MVC拦截器完成一个用户权限验证的功能。即用户必须登录之后才可以访问这个web网站的首页,如果没有登录就直接访问网站首页,则拦截器会拦截请求,并将请求重新转发到登录页面,同时提示用户“需要先登录再访问网站”,由于是演示案例,所以成功登录之后的网站页面我们直接是拼的一个网页显示给用户。本项目作为测试案例,我就不创建Maven项目了,直接创建的是一个Dynamic Web Project(动态的web项目),项目名称为:Interceptor,本项目采用Tomcat 8作为web服务器,我们需要在项目中引入以下jar包,jar包我就截图演示了,附件源码中lib文件夹下会有,这里直接给一个项目的目录结构,如下图:
首先呢,我们要做一个网页,这个网页就是用来提示用户的登录信息,提示输入用户名和密码,在此我们在项目的WebContent/WEB-INF/content文件夹中创建一个loginForm.jsp,这是一个jsp文件,具体代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>登录页面 用于演示拦截器登录页面
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流