拦截器步骤
- 编写一个拦截器实现
HandlerInterceptor
接口。
package com.fzl.web05admin.interceptor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
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;
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
log.info("拦截请求的路径是:"+request.getRequestURI());
Object loginUser = session.getAttribute("loginUser");
if(loginUser != null){
return true;
}
session.setAttribute("msg","请先登录!");
response.sendRedirect("/");
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("postHandler执行!");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("afterHandler");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
- 将拦截器注册到容器中(实现
WebMvcConfiguration
的addInterceptors
)
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
- 指定拦截规则。【如果是拦截所有,静态资源也会被拦截】