登录检查:
@GetMapping("/main.html")
public String mainPage(HttpSession session, Model model){
Object loginUser = session.getAttribute("loginUser");
if(loginUser != null){
return "main";
}else{
model.addAttribute("msg": "请重新登陆");
return "login";
}
}
太麻烦了
拦截器接口: handlerInterceptor
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
弄拦截器:
定义类
public class LoginInterceptor implements HandlerInterceptor {
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if(loginUser != null){
return true;
}else{
session.setAttribute("msg", "请先登陆");
response.sendRedirect("/");
return false;
}
}
// 目标方法执行完之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 页面渲染只后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
配置 -> 实现WebMvcConfigurer的addInterceptor方法
新建配置类
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") // 静态资源也会被拦截
.excludePathPatterns("/", "/login", "/res/**");
}
}
可以通过链式调用来指定放行和拦截的路径
别忘了放行静态资源;