spring拦截器(interceptor)简介

Posted 喜欢和习惯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring拦截器(interceptor)简介相关的知识,希望对你有一定的参考价值。

1. 拦截器用途

  (1)拦截未登录用户直接访问某些链接

  (2)拦截日志信息

  (3)拦截非法攻击,比如sql注入

2. 涉及jar、类

  (1)spring-webmvc.jar

  (2)HandlerInterceptor(org.springframework.web.servlet:接口)、

      AsyncHandlerInterceptor(org.springframework.web.servlet:接口)、 

      HandlerInterceptorAdapter(org.springframework.web.servlet.handler.HandlerInterceptorAdapter:抽象类)

3.业务类

  (1)实现(implements) 实现HandlerInterceptor接口或者子接口

  (2)继承(extends) 继承HandlerInterceptor接口子类(抽象类)

  (3)涉及的方法

      preHandle、postHandle、afterCompletion

4.测试代码

LoginInterceptor

 1 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler throws Exception {
 2   LOGGER.info("--------preHandle-------" + request.getRequestURI());
 3   HttpSession session = request.getSession();
 4   String login_account = String.valueOf(session.getAttribute(CommonConstants.SESSION_KEY+session.getId()));
 5   if(!request.getRequestURI().contains("/baselogin/")){
 6     if (StringUtils.isBlank(login_account) || "null".equalsIgnoreCase(login_account)) {
 7       response.sendRedirect("/baselogin/loginPage.htm");
 8       return false;
 9     }
10   }
11   return true;
12 }
13 
14 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception {
15   LOGGER.info("--------postHandle-------" + request.getRequestURI());
16 }
17 
18 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
19   LOGGER.info("--------afterCompletion-------" + request.getRequestURI());
20 }
21 
22 public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
23   LOGGER.info("--------afterConcurrentHandlingStarted-------" + request.getRequestURI());
24 }

执行顺序:preHandle -> controller -> postHandle -> afterCompletion

配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    ">
<!-- 拦截排除
<mvc:interceptors>
        <mvc:interceptor>
      <mvc:exclude-mapping path=""/>
      <bean class="org.bighead.interceptor.LoginInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

-->
<!-- 拦截登录 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/*/*.htm"/>
            <bean class="org.bighead.interceptor.LoginInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
<beans>

 

以上是关于spring拦截器(interceptor)简介的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot拦截器(Interceptor)

spring拦截器排除 静态资源

Spring MVC Interceptor

springBoot Interceptor拦截器注入mapper 为null

Spring+Session+interceptor+ajax(拦截器)的登陆和退出

interceptor拦截器