您的位置:首页 > 游戏 > 游戏 > 网络软文怎么写_互联网保险和传统保险的区别_seo承诺排名的公司_宣传网站怎么做

网络软文怎么写_互联网保险和传统保险的区别_seo承诺排名的公司_宣传网站怎么做

2024/10/5 21:24:40 来源:https://blog.csdn.net/2301_76419561/article/details/142458856  浏览:    关键词:网络软文怎么写_互联网保险和传统保险的区别_seo承诺排名的公司_宣传网站怎么做
网络软文怎么写_互联网保险和传统保险的区别_seo承诺排名的公司_宣传网站怎么做

 ​

博客主页:     南来_北往

系列专栏:Spring Boot实战


前言

Spring Boot中的拦截器(Interceptor)是一种用于拦截和处理HTTP请求的机制,它基于Spring MVC框架中的HandlerInterceptor接口实现。拦截器允许在请求到达控制器(Controller)之前或之后执行一些共享的逻辑。

自定义拦截器案例

下面是一个自定义拦截器的示例,用于记录请求的开始时间和结束时间:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LogInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {long startTime = System.currentTimeMillis();request.setAttribute("startTime", startTime);return true; // 继续执行后续处理}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {long endTime = System.currentTimeMillis();long startTime = (Long) request.getAttribute("startTime");long executionTime = endTime - startTime;System.out.println("Request URL: " + request.getRequestURL());System.out.println("Execution time: " + executionTime + "ms");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 可选操作,在请求完成后执行一些清理工作}
}

接下来,我们需要将这个拦截器注册到Spring MVC的拦截器链中。可以通过实现WebMvcConfigurer接口并重写addInterceptors方法来实现:

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 WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LogInterceptor()).addPathPatterns("/api/**") // 指定拦截路径模式.excludePathPatterns("/api/login"); // 排除登录路径}
}

在上面的代码中,我们创建了一个名为LogInterceptor的拦截器类,并在WebConfig类中将其注册到拦截器链中。通过addPathPatterns方法指定了需要拦截的URL路径模式,而excludePathPatterns方法则排除了不需要拦截的路径。在这个例子中,我们将拦截所有以"/api/"开头的请求,但排除了"/api/login"路径。

当有请求匹配到指定的路径模式时,LogInterceptor中的preHandle方法会在请求到达控制器之前被调用,postHandle方法会在请求处理完成后被调用。在这些方法中,我们可以添加自定义的逻辑来记录请求的开始时间和结束时间,并计算请求的处理时间。

注册拦截器案例

 下面是一个注册拦截器的示例,用于检查用户是否已登录:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 检查用户是否已登录if (request.getSession().getAttribute("user") == null) {// 如果用户未登录,重定向到登录页面response.sendRedirect("/login");return false; // 阻止请求继续执行后续处理}return true; // 继续执行后续处理}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 可选操作,在请求完成后执行一些清理工作}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 可选操作,在请求完成后执行一些清理工作}
}

接下来,我们需要将这个拦截器注册到Spring MVC的拦截器链中。可以通过实现WebMvcConfigurer接口并重写addInterceptors方法来实现:

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 WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/api/**") // 指定拦截路径模式.excludePathPatterns("/api/login", "/api/register"); // 排除登录和注册路径}
}

在上面的代码中,我们创建了一个名为LoginInterceptor的拦截器类,并在WebConfig类中将其注册到拦截器链中。通过addPathPatterns方法指定了需要拦截的URL路径模式,而excludePathPatterns方法则排除了不需要拦截的路径。在这个例子中,我们将拦截所有以"/api/"开头的请求,但排除了"/api/login"和"/api/register"路径。

当有请求匹配到指定的路径模式时,LoginInterceptor中的preHandle方法会在请求到达控制器之前被调用。在这个方法中,我们检查用户的登录状态,如果用户未登录,则重定向到登录页面并阻止请求继续执行后续处理。如果用户已登录,则允许请求继续执行后续处理。

总结

总结来说,Spring Boot中的拦截器是一种强大的工具,可以在请求处理的不同阶段执行自定义逻辑。通过实现HandlerInterceptor接口并注册到拦截器链中,可以轻松地添加日志记录、权限检查、性能监控等功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com