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:销毁
以上只是简单介绍,更具体的我们下饥节介绍。