赞
踩
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 用户登录拦截器
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* 在请求被处理之前进行操作
*
* @param request
* @param response
* @param handler
* @return 返回true表示继续执行后续的拦截器或Controller;返回false则不再执行后续的拦截器或Controller
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断当前请求是否需要被拦截
if (request.getSession().getAttribute("user") == null) {
// 未登录则重定向到登录页面
response.sendRedirect("/login");
return false;
} else {
return true;
}
}
/**
* 在请求被处理之后但视图还未渲染时进行操作
*
* @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.配置拦截器。在Spring Boot项目的配置文件(如application.properties或application.yml)中添加以下内容:
# application.yml
spring:
mvc:
interceptor:
enabled: true # 开启拦截器功能
path-patterns: /** # 设置拦截路径模式,这里使用/**表示所有URL都会被拦截
exclude-path-patterns: /login # 设置排除的路径模式,这里使用/login表示登录页面不会被拦截
3.注册拦截器。创建一个配置类,将自定义的拦截器注入到Spring容器中:
import com.itasen.asenmanageweb.handlerInterceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
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 InterceptorConfig implements WebMvcConfigurer {
//登录拦截器
private final LoginInterceptor loginInterceptor = new LoginInterceptor();
@Bean
public LoginInterceptor getLoginInterceptor() {
return this.loginInterceptor;
}
/**
* 排除拦截页面
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getLoginInterceptor()).excludePathPatterns(
new String[]{
"/login"
,"/"
}
); // 注册拦截器并指定排除的路径模式
}
}
4.运行程序测试。当发送HTTP请求时,自定义的拦截器就会按照配置的路径模式对请求进行拦截和处理了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。