springboot中的拦截器
自定义拦截器,如果发送的请求中获取不到user,就进行拦截
需要实现 HandlerInterceptor 接口
package blog.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 自定义登录过滤拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler
) throws Exception {
// 如果从session中获取不到用的话,就重定向到登录页面让用户登录
if (request.getSession().getAttribute("user") == null){
response.sendRedirect("/admin");
return false; // 不让请求继续执行
}
// 能获取到user数据,放行
return true;
}
}
创建配置文件类,将我们自定义的登录拦截器放入spring的配置中
需要实现WebMvcConfigurer接口
package blog.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
@Configuration // 标记是一个配置文件类
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 我们自定义的拦截器
LoginInterceptor loginInterceptor = new LoginInterceptor();
// 指定要排除不过滤的url路径
ArrayList<String> list = new ArrayList<>();
list.add("/admin");
list.add("/admin/login");
// 把我们自定义的拦截器放入拦截配置文件中
registry.addInterceptor(loginInterceptor)
// 拦截admin下面的所有的请求
.addPathPatterns("/admin/**")
// 指定某个路径不被拦截
.excludePathPatterns(list);
}
}