首页 > 其他分享 >springboot自定义拦截器

springboot自定义拦截器

时间:2023-04-26 22:11:17浏览次数:34  
标签:拦截器 springboot 自定义 request response import public

springboot自定义拦截器

操作说明

1、编写一个拦截器实现HandlerInterceptor接口
2、拦截器注册到容器中(实现WebMvcConfigures的addInterceptors)
3、指定拦截规则  (如果是拦截所有,静态资源也会被拦截)

LoginInterceptor.java

package com.example.springtxiangmu.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

//登陆检查
@Slf4j  //能直接使用日志
public class LoginInterceptor implements HandlerInterceptor {
    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURL=request.getRequestURI();
        log.info("拦截的请求路径是{}",requestURL);
//显示当前的请求路径
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
//获得上面登陆的cookie
        if(loginUser!=null){
            return true;
        }
        //拦截器拦截住了,说明没有登陆,直接跳转到登陆界面
        request.setAttribute("msg","请先登陆");
        //response.sendRedirect("/");
        request.getRequestDispatcher("/").forward(request,response);
//跳转到根目录,并且转发 request、response
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("PostHandler执行",modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("afterCompletion执行",ex);
    }
}

执行顺序(先后)

postHandle > 界面运行 >postHandle >afterCompletion

AdminWebConfig.java

@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
//这里继承了WebMvcConfigurer
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//添加上自定义的拦截器
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**/")//拦截的请求
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");// 放行的请求
    }
}

总结

流程就是,自定义拦截器实现HandlerInterceptor接口重写那三个方法,然后自定义一个配置类需要加(@Configuration)继承WebMvc接口,在里面添加自定义拦截器。
注意的是导入@Slf4j的时候,log.info  l是小写,这里写
出了Log.info 搞了好久。细心,细心,细心!
String requestURL=request.getRequestURI();
//获取当前访问页面的路径,比如访问index就会显示 index  {}相当于c中的%d占位符
        log.info("拦截的请求路径是{}",requestURL);

标签:拦截器,springboot,自定义,request,response,import,public
From: https://www.cnblogs.com/JYcxk/p/17357550.html

相关文章

  • maven 自定义变量
    可以用properties这个标签来自定义变量,例如:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xs......
  • oracle plsql 自定义函数
    例如:CREATEORREPLACEFUNCTIONHELLO(strINVARCHAR2)RETURNVARCHAR2ISRETVARCHAR2(20);BEGINRET:='Hello'||str;DBMS_OUTPUT.put_line(RET);RETURNRET;END;执行:SELECTHELLO('yang')FROMDUAL;删除:DROPFUNCTIONHELLO;......
  • jsp 自定义标签
    新疆web工程:Java代码:packagecom.tld.bean;publicclassUserInfo{ privateStringusername; privateintage; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicintgetA......
  • Django模板层 (变量分配 过滤器 标签 继承和导入 自定义过滤器、标签及inclusion_ta
    目录一、模板变量分配定义 在后端变量的值通过模板语法传到前端符号{{}}:主要与数据值相关{%%}:主要与逻辑相关模板语法注意点:1.针对需要加括号调用的名字django模板语法会自动加括号调用你只需要写名字就行2.模板语法的注释{##},前端浏览器是无法查看的,因为它要先......
  • 小程序自定义导航如何实现的
    onLaunch(){//展示本地存储能力constlogs=wx.getStorageSync('logs')||[]logs.unshift(Date.now())wx.setStorageSync('logs',logs)//获取系统信息this.globalData.systemInfo=wx.getSystemInfoSync();//获取状态栏高度th......
  • react18中antd的select选择器组件自定义下拉框的内容
    效果如图导入组件和图标import{Select}from'antd'import{ManOutlined,WomanOutlined}from'@ant-design/icons';const{Option}=Select;数据letuserListOption=[{value:1,label:"小明",avatar:"http://xxx......
  • SpringSecurity从入门到精通:其他权限校验方法&自定义权限校验方法
    其他权限校验方法我们前面都是使用@PreAuthorize注解,然后在在其中使用的是hasAuthority方法进行校验。SpringSecurity还为我们提供了其它方法例如:hasAnyAuthority,hasRole,hasAnyRole等。​这里我们先不急着去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学......
  • 在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框
    在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框1、先写一个自定义的AlertDialog。 packagecom.phone.common_library.dialog; importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.vie......
  • SpringSecurity从入门到精通:从数据库查询权限信息&自定义失败处理
    从数据库查询权限信息      记得打开redis      自定义失败处理我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity......
  • SpringBoot2 hikari关于 Failed to validate connection com.mysql.cj.jdbc.Connectio
    项目启动不报错,如果静默15分钟没有数据库操作就报上述错误WARN不影响程序运行Failedtovalidateconnectioncom.mysql.cj.jdbc.ConnectionImpl@16244d67(Nooperationsallowedafterconnectionclosed.).PossiblyconsiderusingashortermaxLifetimevalue.发现Spri......