首页 > 其他分享 >Spring Boot 配置拦截器

Spring Boot 配置拦截器

时间:2023-10-14 16:13:43浏览次数:30  
标签:拦截器 Spring Boot springframework org import servlet public

image

通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。

一、新建一个拦截器

新建登录验证类 LoginValidationInterceptor.java:

package site.exception.springbootinterceptor.interceptor;

import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import site.exception.springbootinterceptor.entity.User;

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

/**
 * @time 12:19
 * @discription 登录验证拦截器
 **/
public class LoginValidationInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle ...");
        User user = (User) request.getSession().getAttribute("user");
        if (user == null) {
            // 若未登录,重定向到登录页面
            response.sendRedirect("login.html");
            return false;
        }
        // 若已登录,继续往下执行
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle ...");
        // controller 方法调用完毕后,执行此方法
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("afterCompletion ...");
        // 页面渲染完成后调用此方法, 一般用来清除某些资源等
    }
}

定义一个拦截器类后,您需要实现 HandlerInterceptor 接口,其有三个方法可以重写:

  • preHandle: 在调用 Controller 方法之前,执行此方法;
  • postHandle: 在调用 Controller 方法之后,页面渲染之前,执行此方法,通常您可以在此方法中将渲染的视图名称更改为其他视图名称;
  • afterCompletion: 此方法在页面渲染完毕之后被调用;

二、配置拦截器

上面,您已经定义好一个登陆拦截的拦截器了,接下来,需要做一下全局配置。

新建 WebMvcConfig.java 配置类:

package site.exception.springbootinterceptor.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import site.exception.springbootinterceptor.interceptor.LoginValidationInterceptor;

/**
 * @time 12:17
 * @discription
 **/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 配置拦截器
     * @param interceptorRegistry
     */
    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry) {
        // 拦截所有 /admin/** 的访问地址
        interceptorRegistry.addInterceptor(new LoginValidationInterceptor()).addPathPatterns("/admin/**");
    }
}

到此,一个简单的拦截器就配置完成了!

标签:拦截器,Spring,Boot,springframework,org,import,servlet,public
From: https://www.cnblogs.com/shenMaQN/p/17764279.html

相关文章

  • 简单易用的Spring Boot邮件发送
    ......
  • Spring Cloud建筑工地智慧平台源码,自主版权+实际应用案例
    建筑工地智慧平台源码,施工管理端、项目监管端、数据大屏端、移动APP端全套源码技术架构:微服务+Java+SpringCloud、Vue+UniApp+MySql+自主版权+实际应用案例+演示   建筑工地智慧平台已应用于线上巡查、质量管理、实名制管理、危大工程管理、运渣车管理、绿色施工、视频监......
  • Springboot中使用RabbitMq
    代码地址:https://gitee.com/Aes_yt/middleware-demo/tree/master/rabbitmq安装RabbitMq1.docker拉取镜像dockerpullrabbitmq:3.9.29-management2.创建rabbitmq容器dockerrun-d--namerabbitmq-p5672:5672-p15672:15672rabbitmq:3.9.29-management3.访问地......
  • spring6-事务
    1、JdbcTemplate1.1、简介Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作1.2、准备工作①搭建子模块搭建子模块:spring-jdbc-tx②加入依赖<dependencies><!--springjdbcSpring持久化层支持jar包--><dependency><groupId>org.springfram......
  • 博学谷学习记录 自我总结 用心分享 | Spring源码刨析
    别再盲目的说spring有三级缓存了,两个缓存只是启动时为了解决循环依赖,spring启动后只有一个缓存有用一、什么是循环依赖循环依赖指的就是循环引用,就是两个或多个bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则它们最终......
  • Spring Boot + Redis 延时双删功能,实战来了!
    一、业务场景在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据B修改Redis数据请求二:C修改数据库数据D修改Redis数据并发情况下就会存在A—>C—>D—>B的情......
  • Spring远程命令执行漏洞(CVE-2022-22965)原理研究
    一、前置知识SpringMVC参数绑定为了方便编程,SpringMVC支持将HTTP请求中的的请求参数或者请求体内容,根据Controller方法的参数,自动完成类型转换和赋值。之后,Controller方法就可以直接使用这些参数,避免了需要编写大量的代码从HttpServletRequest中获取请求数据以及类型转换。这个......
  • Java设计模式-策略模式-基于Spring实现
    1、策略模式1.1、概述策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它将算法封装在独立的策略类中,使得它们可以相互替换,而不影响客户端代码。这种模式通过将算法的选择从客户端代码中分离出来,提供了更大的灵活性和可维护性。在Java中,策略模式的设计理念可以通过以......
  • 采用SpringBoot+原生HTML+MySQL开发的电子病历系统源码
    电子病历系统采用“所见即所得、一体化方式”,协助医生和护士准确、标准、快捷实现病历书写、修改、审阅、打印、体温单浏览、医嘱管理等,是提供病历快速简洁化完成的一系列综合型医生病历工作平台。本套电子病历系统主要面向医疗机构医生、护士,提供对住院病人的电子病历书写、保存......
  • springboot2.4下使用JUnit依赖注入失败的解决方案
    首先在pom.xml下引入JUnit必须的包:<dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId&......