【SpringMVC】| SpringMVC拦截器

这篇具有很好参考价值的文章主要介绍了【SpringMVC】| SpringMVC拦截器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:SpringMVC拦截器

1. 拦截器介绍

2. HandlerInterceptor接口分析

3. 自定义拦截器实现权限验证


一:SpringMVC拦截器

SpringMVC 中的 Interceptor 拦截器,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前”。当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。

1. 拦截器介绍

(1)拦截器的应用场景 

针对请求和响应进行的额外的处理,在请求和响应的过程中添加预处理、后处理和最终处理;主要应用在以下场景当中:

①日志记录:记录请求信息的日志。

②权限检查:如登录检查。

③性能检测:检测方法的执行时间。

(2)拦截器的执行原理

【SpringMVC】| SpringMVC拦截器

①preHandle():在请求被处理之前进行操作;预处理
②postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果;后处理。
③afterCompletion:所有的请求响应结束后执行善后工作,清理对象、关闭资源 ;最终处理.。

(3)拦截器实现的两种方式

继承HandlerInterceptorAdapter【处理程序拦截适配器】的父类。
实现HandlerInterceptor【处理程序拦截器】接口,推荐使用实现接口的方式,因为继承是单继承的。

2. HandlerInterceptor接口分析

自定义拦截器,需要实现 HandlerInterceptor 接口;并且该接口中含有三个方法:

(1)preHandle

该方法在处理器方法执行之前执行。其返回值为 boolean类型,若为 true,则紧接着会执行处理器方法,且会将 afterCompletion()方法放入到一个专门的方法栈中等待执行。

(2)postHandle

该方法在处理器方法执行之后执行处理器方法若最终未被执行,则该方法不会执行。由于该方法是在处理器方法执行完后执行,且该方法参数中包含 ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向。

(3)afterCompletion

当preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行的,此时对 ModelAndView 再操作也对响应无济于事。afterCompletion 最后执行的方法,清除资源,例如在 Controller 方法中加入数据等。

3. 自定义拦截器实现权限验证

(1)改造登录方法,在session中存储用户信息,用于进行权限验证

细节:一定要注意我们登录界面login.jsp跳转到的是/login还是/login.action;有没有带action直接决定我们后面拦截器exclude-mapping通行的路径带不带.action!

package com.bjpowernode.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class WebInfAction {
    // 首先要跳转到登录页面
    @RequestMapping("/showLogin")
    public String submit(){
        System.out.println("访问login.jsp进行登录");
        return "login";
    }
    // 跳转到login.jsp后,在进行判断
    @RequestMapping("/login")
    public String login(String name, String pwd, HttpServletRequest request){ // 与前端保持一致,提交的数据自动吸过来
        if ("root".equalsIgnoreCase(name) && "123".equalsIgnoreCase(pwd)){
            // 在session中存储用户信息(把name存进去),用于权限验证
            request.getSession().setAttribute("user",name);

            return "main";
        }else {
            request.setAttribute("msg","用户名或者密码不正确");
            return "login";
        }
    }
}

(2)开发拦截器的功能,实现HandlerInterceptor接口,重写preHandle()方法

package com.bjpowernode.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    // 重写preHandle方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 是否登录的判断
        if(request.getSession().getAttribute("user") == null){ // 能取出来,表示登录过
            // 没有登录,打回到登录的页面,并给出提示
            request.setAttribute("msg","请先去登录!");
            request.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,response);
            return false;
        }
        // 如果登录过,就放行往下走
        return true;
    }
}

(3)在springmvc.xml文件中注册拦截器

拦截器中可以配置一个拦截器链,层层把关;这里我们只需要配置一个,总共配置三部分:

①映射要拦截的请求,一般设置为全部拦截。

②然后在设置要放行的请求。

③配置具体的拦截器实现功能的类。

    <!--注册拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--映射要拦截的请求-->
            <mvc:mapping path="/**"/>
            <!--配置要放行的请求-->
            <mvc:exclude-mapping path="/showLogin"/><!--登录的页面-->
            <mvc:exclude-mapping path="/login"/><!--登录验证的页面-->
            <!--配置具体的拦截器实现功能的类-->
            <bean class="com.bjpowernode.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

(4)测试:

在登录之前,我们还是知道showMain或者showIndex,直接访问是不能访问的,被拦截了

【SpringMVC】| SpringMVC拦截器

在成功登录之后,我们不关闭当前会话,重新开一个窗口, 直接访问就可以访问了

【SpringMVC】| SpringMVC拦截器文章来源地址https://www.toymoban.com/news/detail-458830.html

到了这里,关于【SpringMVC】| SpringMVC拦截器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文学会 SpringMVC 拦截器

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SSM 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:一文学会 SpringM

    2024年02月02日
    浏览(46)
  • 12、SpringMVC之拦截器

    创建名为spring_mvc_interceptor的新module,过程参考9.1节和9.5节 与自定义的过滤器一样,自定义的拦截器也要配置后才能生效; 过滤器是服务器中的组件,所以配置到 web.xml 中; 拦截器是 springmvc 中的组件,因此要配置到 springmvc 的配置文件中。 因为在配置拦截器时,没有指定要

    2024年02月05日
    浏览(44)
  • springmvc统一异常处理拦截器

    使用@RestControllerAdvice+@ExceptionHandler实现 也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler实现 创建一个异常处理的类,放在config包下  组件类:  也可以让不同的异常返回不同的结果,捕获什么异常由@ExceptionHandler的value属性决定,传入一个类对象(可以通过反射获得)  

    2024年02月15日
    浏览(40)
  • SpringMVC的拦截器(Interceptor)

    对于拦截器这节的知识,我们需要学习如下内容: 拦截器概念 入门案例 拦截器参数 拦截器工作流程分析 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如果是

    2024年02月09日
    浏览(40)
  • SpringMVC Day 10 : 拦截器

    拦截器是Spring MVC框架提供的一种强大的机制,用于在请求到达控制器之前或之后进行预处理和后处理。它可以拦截并处理请求,对请求进行必要的修改或验证,以及在请求返回给客户端之前进行额外的操作。拦截器可以帮助我们实现各种需求,如身份验证、日志记录、性能监

    2024年02月06日
    浏览(39)
  • SpringMVC拦截器和异常处理机制

    SpringMVC拦截器类似于过滤器,用于进行预处理和后处理 将拦截器按照一定顺序连接成一条链,就是拦截器链 创建拦截器类实现HandlerInterceptor接口 配置拦截器 测试拦截器的拦截效果 三个方法的执行:在配置文件中依次配置两个拦截器分别为1和2,则执行顺序是:1的 preHandle

    2024年02月16日
    浏览(50)
  • SpringMVC中拦截器的简单使用

    步骤一:创建拦截器类 首先,我们需要创建一个拦截器类,该类需要实现 HandlerInterceptor 接口。这个接口定义了三个方法,分别在请求处理前、请求处理后和视图渲染后执行。 步骤二:创建配置类 上述配置类使用了 @Configuration 注解,表示这是一个配置类。通过 @Bean 注解将

    2024年01月17日
    浏览(41)
  • 第9章:SpringMVC的拦截器

    1. 拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件进行配置 ①创建拦截器,继承接口HandlerInterceptor.  ②在springMVC配置文件里配置拦截器   !-- 拦截所有的请求,除了 /-- 2. 拦截器的

    2024年02月08日
    浏览(37)
  • SpringMVC下半篇之拦截器

    拦截器 文件上传 异常处理器 ssm整合 ​ Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。 ​ 拦截器依赖于web框架,在实现上基于Java的反射机制,属于面向

    2024年01月23日
    浏览(98)
  • 【SpringMVC】拦截器&JSR303的使用

    目录 一、JSR303 1.1.什么是JSR303 1.2.为什么使用JSR303 1.3.常用注解 1.4.@Validated与@Valid区别 1.5.JSR快速入门 1.5.1.导入依赖 1.5.2.配置校验规则 1.5.3.入门案例 二、拦截器 2.1什么是拦截器 2.2.拦截器与过滤器 2.3.应用场景 2.4.拦截器快速入门 2.4.1.入门案例 2.4.2.拦截器工作原理 2.5.拦截器

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包