springboot拦截器
拦截器的底层是HandlerInterceptor 这个接口
这个接口中有三个方法:
其中preHander 是拦截前置工作
postHander是拦截逻辑处理完毕后的工作
afterCompletion是页面渲染完毕后,要做的一些工作,即请求已经完成后的工作
我们实现一个登录拦截
1.新建一个类,实现接口HandlerInterceptor,用来登录检查
package com.example.adminproject.Interceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 实现拦截器的功能,拦截哪些功能 * 将拦截器配置到容器中 * * */ //一个新的注解,lombok提供的日志 @Slf4j public class LoginInterceptor implements HandlerInterceptor { /** * * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("拦截的请求{}",request.getRequestURI()); //登录检查 HttpSession session = request.getSession(); Object loginUser = session.getAttribute("loginUser"); if (loginUser!=null){ return true; //拦截放行 } else { //拦住的话 session.setAttribute("msg","请先登录"); response.sendRedirect("/"); return false; //拦截 } } /** * * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
2.实现了拦截器后,我们要配置到springboot容器中
使用Configuration注解,实现WebmvcConfigurer接口中的拦截器方法
并指定拦截规则。注意静态资源!!
package com.example.adminproject.Config; import com.example.adminproject.Interceptor.LoginInterceptor; 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 AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**")//拦截所有请求包括静态资源 .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //但是不拦截包括登录页面和静态资源 } }