SpringBoot实战项目(十六)--拦截器配置及登录拦截

PS:本文重点在如何在Spring-Boot中使用拦截器,关于拦截器的原理请大家查阅资料了解。

实现自定义拦截器只需要3步: 

1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口。 

2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。 

2、实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中。

先来自定义一个MyInterceptor拦截器;
拦截器一般需要继承HandlerInterceptor接口,并需要实现以下三个接口方法:

 

 

 

 1 package com.beilin.interceptor;
 2 
 3 
 4 
 5 
 6 import org.springframework.web.servlet.HandlerInterceptor;
 7 
 8 
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.util.Date;
12 
13 /**
14  *  拦截器
15  */
16 public class MyInterceptor implements HandlerInterceptor {
17 
18  
19 
20     @Override
21     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
22         //获取登录时保存到session的用户信息
23         SysUser user = (SysUser) request.getSession().getAttribute("user");
24         if (user == null) {
25             //拦截未登录请求,跳转到登录页面
26             request.getRequestDispatcher("/login").forward(request, response);
27             return false;
28         }
29         return true;
30     }
31 
32     @Override
33     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
34 
35     }
36 
37     @Override
38     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
39         }
40     
41 
42 }

拦截器定义完成后,还需要将拦截器注册才能生效,并指定该拦截器所拦截的场景。

创建MyWebMvcConfig继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法

 


package com.beilin.interceptor;

import org.springframework.context.annotation.Bean;
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 MyWebMvcConfig implements WebMvcConfigurer {

/**
* 将自定义拦截器作为bean写入配置
* @return
*/
@Bean
public MyInterceptor myInterceptor(){
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截处理操作的匹配路径
//放开静态拦截
registry.addInterceptor(myInterceptor())
.addPathPatterns("/**") //拦截所有路径
.excludePathPatterns("/login", "/", "/exit", "/get_cpacha")//排除路径
.excludePathPatterns("/xadmin/**");//排除静态资源拦截

}

}

跟拦截器相关的执行流程如下:

 

 

 测试--直接访问主页,拦截器自动拦截所有请求,判断用户是否登录,否--跳转到登录页面

 

 

posted on 2020-05-07 11:21  北林日记  阅读(3921)  评论(0编辑  收藏  举报

导航