您好,登录后才能下订单哦!
拦截器简介
Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter)。用于对处理器进行预处理和后处理。常用于日志记录、权限管理、性能监控、通用行为等。
拦截器的实现
Spring MVC 中的拦截器需要我们手动实现和配置。拦截器可以通过以下两种方式定义
HandleInterceptor 接口
我们主要讲解下实现 HandleInterceptor 接口来创建拦截器。HandleInterceptor 接口定义了三个方法,分别为 preHandle() , postHandle() , afterCompletion(),我们需要重写这三个方法,从而来实现我们定义拦截器的目的。
假设我们现在定义了两个拦截器,xml 配置文件中配置顺序如下内容如下:
<!-- 拦截器1 --> <mvc:interceptor> <!--配置拦截器的作用路径--> <mvc:mapping path="/**"/> <bean class="com.jojo.test.interceptor.Intercptor1"/> </mvc:interceptor> <!--拦截器2--> <mvc:interceptor> <mvc:mapping path="/hello"/> <bean class="com.jojo.test.interceptor.Interceptor2"/> </mvc:interceptor>
那么这两个拦截器中的处理方法和请求的处理方法的顺序如下图:
实际应用举例
实现开发中,我们会要求一些页面需要登录后才能访问。未登录状态是无法得到访问权限的。这一小功能我们可以直接通过安全框架,类似 Spring Security 或者 shiro 来实现,不过我们现在利用 Spring MVC 这一功能来实现一下:
public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { User user = (User) httpServletRequest.getSession().getAttribute("user"); if (user == null) { // 用户未登录,重定向到登录页 httpServletResponse.sendRedirect("/login"); return false; } return true; } public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } } public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { } }
我们还需要在 spring-mvc 中配置拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/static/**"/> <mvc:exclude-mapping path="/login"/> <bean class="com.jojo.test.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>
相关配置说明:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。