文章目录
前言
本篇主要介绍spring框架里提供的 HandlerInterceptor 拦截器做登录拦截。
一、interceptor
1.interceptor 包下新建loginInterceptor.java
继承spring框架里的 HandlerInterceptor 接口,提供了三个方法做拦截,这里使用了第一个方法 preHandle 。
/*
登录检查
1.配置好拦截器需要拦截哪些请求
2.将这些配置放在容器中
*/
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 打印日志:拦截的请求路径
String requestURL = request.getRequestURI();
log.info("拦截的请求路径是{}",requestURL);
// 登录逻辑检查
HttpSession session = request.getSession();
Object loginUsername = session.getAttribute("username");
if (loginUsername != null){
return true;//session里有loginUsername信息放行
}
//否则拦截,添加返回登录页面的错误信息,重定向到登录页
session.setAttribute("msg","请先登录");//前端{session.msg}接收
response.sendRedirect("/user/login");
// request.setAttribute("msg","请先登录");
// request.getRequestDispatcher("/user/login").forward(request,response);
return false;
}
// 目标方法执行完成之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2.config 包下新建 AdminWebConfig.java
配置:继承spring框架里的 HandlerInterceptor 接口,使用提供的 addInterceptors 方法,注册上面写的拦截器 LoginInterceptor 。
拦截所有的请求,放行登录相关请求和一些静态资源请求。
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")//默认拦截所有请求,包括静态资源
// 改成/*放过了静态资源,教学视频里的弹幕提示,尝试有效但存疑。/*表示一层路径(多个字符),/**表示n层目录。不用这个方法最好。
// .addPathPatterns("/*")
.excludePathPatterns("/user/login","/user/toLogin","/validateCode","/user/reg","/user/checkUsername","/user/toReg",
"/user/**");//放行这些请求(去登录页、登录验证、验证码资源获取)"/user/**"表示放过静态资源static文件夹下的user文件夹所有静态资源
}
}
3.返回登录页面接收提示信息
前端登录的提示信息有两种,一个通过 session 的 session.setAttribute() 传值, $ {session.msg} 接收;一种通过 model.addAttribute() 传值,$ {msg} 接收。
记得登录信息验证时,把拦截器用 session 传的提示信息清空。
<span th:text="${msg}" style="color: red"></span>
<span th:text="${session.msg}" style="color: red"></span>
文章介绍了如何在Spring框架中使用HandlerInterceptor实现登录拦截功能。创建了loginInterceptor.java,实现了预处理方法preHandle进行登录检查,如果session中无username信息则重定向到登录页面。在AdminWebConfig.java中配置拦截器,排除特定的登录和静态资源请求。前端通过session获取登录提示信息。
308

被折叠的 条评论
为什么被折叠?



