拦截器在Spring框架中的应用

发布时间:2025-03-23 21:41:13 作者:小樊
来源:亿速云 阅读:123

在Spring框架中,拦截器(Interceptor)是一种强大的机制,用于在处理请求之前或之后执行特定的逻辑。拦截器通常用于实现横切关注点(cross-cutting concerns),例如日志记录、性能监控、安全检查等。Spring提供了多种方式来实现拦截器,其中最常用的是基于HandlerInterceptor接口的实现。

以下是拦截器在Spring框架中的一些应用:

1. 基本概念

2. 配置拦截器

拦截器可以通过Java配置或XML配置来注册。

Java配置

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/api/**") // 拦截/api/**路径下的所有请求
                .excludePathPatterns("/api/login", "/api/register"); // 排除某些路径
    }
}

XML配置

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/api/**"/>
        <mvc:exclude-mapping path="/api/login"/>
        <mvc:exclude-mapping path="/api/register"/>
        <bean class="com.example.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

3. 应用场景

3.1 日志记录

在请求处理之前和之后记录日志,便于跟踪请求的处理过程。

public class LoggingInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("Request URL: {}", request.getRequestURL());
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("Request completed: {}", request.getRequestURL());
    }
}

3.2 性能监控

在请求处理前后记录时间戳,计算请求的处理时间。

public class PerformanceInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(PerformanceInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        request.setAttribute("startTime", System.currentTimeMillis());
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        long startTime = (Long) request.getAttribute("startTime");
        long endTime = System.currentTimeMillis();
        logger.info("Request took {} ms: {}", endTime - startTime, request.getRequestURL());
    }
}

3.3 安全检查

在请求处理之前进行身份验证和授权检查。

public class SecurityInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication == null || !authentication.isAuthenticated()) {
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

4. 注意事项

通过合理使用拦截器,可以有效地实现横切关注点,提高代码的可维护性和可扩展性。

推荐阅读:
  1. Java NIO 新 IO 是如何提升性能的
  2. 新 IO 在 Java 中是如何实现的

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:如何调试Java Interceptor代码

下一篇:怎样创建自定义Java Interceptor

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》