拦截器的介绍

1.什么是拦截器:

拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执⾏预先设定的代码,类似于我们去景区的闸门,来拦截游客,如果有门票才能进去。

⽐如我们去银⾏办理业务, 在办理业务前后, 就可以加⼀些拦截操作办理业务之前, 先取号, 如果带⾝份证了就取号成功 业务办理结束, 给业务办理⼈员的服务进⾏评价. 这些就是"拦截器"做的⼯作.

拦截器的使用:

第一步:定义拦截器:

定义拦截器也就是定义它如何工作,比如做用户校验等工作,或者获取参数。

首先我们要实现HandleInterceptor接口:
 

public class LoginInterceptor implements HandlerInterceptor {
    
}

这里写了接口HandlerInterceptor的几个实现方法,

preHandle:

表示请求处理之前,如果已经登入了就会返回true,否则就会拦截住,让你继续去登入.

​
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        UserInfo userInfo=(UserInfo) session.getAttribute(constant.USER_SESSION_KEY);
        if (userInfo==null){
            response.setStatus(401);
            return false;
        }
        return true;


    }

​

postHandle:

表示处理请求后返回的时候进行的处理

package com.syx.book.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("preHandle begin......");
        return true;
    }

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

在这里我们定义了一个登录拦截器(LoginInterceptor),并且写好了登录拦截器的preHandle和postHandle的职责,在接收请求之前会执行preHandle方法。

 接收请求之后会执行poostHandle方法。

第二步:配置拦截器:

拦截器要上岗,使用在项目中,这就是我们的配置拦截器。

package com.syx.book.config;

import com.syx.book.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;



@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**");

    }
}

在这里的添加路径addPathPatterns()方法中后边添加的是要配置的路径:

但是我们并不需要所有的都需要进行拦截,还有的不用拦截比如登录界面,在登录界面是创建session的界面。通过excludePathPatterns("/user/login")方法来排除该路径。也就是不拦截它。


 当我们发送数据后,这时候就被拦截了,并且返回401 ,说明没有登录。

一些日志的介绍(零零散散):

使用jdk17.0.12进程的id是24748

Tomcat初始化使用8080端口号

tomcat是一个web服务器,后面还有tomcat的版本

初始化spring容器,咱们注入的对象都放在这个容器里面alpplicationcontext

初始化花费的时间

tomcat是一个容器,装服务的容器8080是tomcat默认端口号,tomcat可以启动n个项目,使用contextpath区分不同的项目

应用启动起来了,只有当tomcat启动起来应用才能起来。


spring是基于servlet开发的

面试题(servlet的生命周期)

init:映射关系等等等,service:具体逻辑对应http,细一步加工,destroy:销毁

以上只是简单介绍,更具体的我们下饥节介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值