目录
1.拦截器执⾏流程
拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤户的请求,
开发⼈员提前预定义⼀些逻辑, 在⽤户的请求响应前后执⾏. 也可以在⽤户请求前阻⽌ 其执⾏
拦截器执⾏流程
添加拦截器后, 执⾏Controller的⽅法之前, 请求会先被拦截器拦截住. 执⾏
preHandle()
⽅法,
这个⽅法需要返回⼀个布尔类型的值. 如果返回true, 就表⽰放⾏本次操作, 继续访问controller中的
⽅法. 如果返回false,则不会放⾏(controller中的⽅法也不会执⾏)
controller当中的⽅法执⾏完毕后,再回过来执⾏
postHandle()
这个⽅法以及
afterCompletion()
⽅法,执⾏完毕之后,最终给浏览器响应数据.
2.拦截器的使用
1. 定义拦截器2. 注册配置拦截器
2.1定义拦截器
⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法
LoginInterceptor类
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("LoginInterceptor ⽬标⽅法执⾏前执⾏..");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("LoginInterceptor ⽬标⽅法执⾏后执⾏..");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("LoginInterceptor 视图渲染完毕后执⾏,最后执⾏");
}
}
重写方法说明:
1.preHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true: 继续执⾏后续操作; 返回false: 中断后续操作.
2.postHandle()⽅法:⽬标⽅法执⾏后执⾏
3.afterCompletion()⽅法:视图渲染完毕后执⾏,最后执⾏
2.2注册配置拦截器
我们在注册配置拦截器的时候, 通过
addPathPatterns()
⽅法指定要拦截哪些请求. 也可以通过
excludePathPatterns()
指定不拦截哪些请求
⽐如⽤⼾登录校验, 我们希望可以对除了登录之外所有的路径⽣效
import com.wh.interceptor.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 WebConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns("/user/login")
.excludePathPatterns("/**/*.html");
}
}
拦截路径设置:
以上拦截规则可以拦截此项⽬中的使⽤ URL,包括静态⽂件(图⽚⽂件, JS 和 CSS 等⽂件)
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞 ![]()

2万+






