
通过拦截器,我们可以针对特定 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/**");
- }
- }
复制代码 到此,一个简单的拦截器就配置完成了!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |