springboot2 使用mvc拦截器,并且把拦截机加入到mvc。示例代码

在Spring Boot 2中,您可以使用HandlerInterceptor接口来创建拦截器,并通过WebMvcConfigurer将其添加到Spring MVC中。以下是一个简单的示例代码,演示如何创建一个拦截器,并将其添加到Spring Boot 2的MVC配置中:

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 WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 将自定义拦截器添加到拦截器链
        registry.addInterceptor(new CustomInterceptor())
                .addPathPatterns("/secure/**") // 设置拦截的路径
                .excludePathPatterns("/public/**"); // 设置排除拦截的路径
    }
}

上述代码中,创建了一个名为CustomInterceptor的自定义拦截器,并通过addInterceptors方法将其添加到拦截器链。.addPathPatterns用于指定需要拦截的路径,而.excludePathPatterns用于指定排除拦截的路径。

接下来,让我们创建自定义拦截器CustomInterceptor

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在请求处理之前执行,返回true表示继续执行,返回false中断执行
        System.out.println("Pre-handle method is called");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // 请求处理之后调用,但在视图被渲染之前,可以对ModelAndView进行操作
        System.out.println("Post-handle method is called");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) throws Exception {
        // 整个请求处理完毕回调方法,即在视图渲染完毕时调用
        System.out.println("After-completion method is called");
    }
}

上述代码中,CustomInterceptor实现了HandlerInterceptor接口,并重写了三个方法:preHandlepostHandleafterCompletion,分别表示在请求处理之前、处理之后和整个请求完成之后的回调方法。

通过这样的配置,您可以在Spring Boot 2中使用拦截器进行请求的预处理、后处理以及完成后的操作。


三个方法分别可以做什么,举个应用场景例子 并给出代码

当使用HandlerInterceptor接口时,三个方法的具体作用如下:

1. preHandle 方法:

preHandle 方法在实际处理器方法被调用之前被调用。它可以用于诸如身份验证、日志记录或请求修改等任务。

应用场景示例:身份验证

假设您想在允许访问某些资源之前检查用户是否已经通过身份验证。您可以使用 preHandle 来实现这个目的。

public class AuthenticationInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 检查用户是否已经通过身份验证
        if (!isUserAuthenticated(request)) {
            // 如果没有通过身份验证,发送 401 未授权响应
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return false; // 中断进一步处理
        }
        return true; // 继续请求处理
    }

    private boolean isUserAuthenticated(HttpServletRequest request) {
        // 您的身份验证逻辑在这里
        // 例如,检查用户是否已登录
        // 您可以使用 Spring Security 或自定义逻辑
        return /* 检查用户是否已通过身份验证 */;
    }
}

2. postHandle 方法:

postHandle 方法在处理器方法被调用后,视图被渲染之前被调用。它可以用于修改 ModelAndView 等任务。

应用场景示例:向模型添加属性

您可能想在渲染视图之前向模型添加一些属性。

public class AddAttributeInterceptor implements HandlerInterceptor {

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // 向模型添加自定义属性
        if (modelAndView != null) {
            modelAndView.addObject("customAttribute", "这是一个自定义属性");
        }
    }
}

3. afterCompletion 方法:

afterCompletion 方法在视图被渲染后调用。它可以用于清理任务或记录日志。

应用场景示例:记录日志

您可能想在处理请求后记录有关请求的信息。

public class LoggingInterceptor implements HandlerInterceptor {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) throws Exception {
        // 记录有关已完成请求的信息
        System.out.println("请求完成,URI:" + request.getRequestURI());
    }
}

这些示例提供了如何在请求处理前、期间和后使用 HandlerInterceptor 方法的基本理解。根据应用程序的要求,您可以实现这些方法以执行特定的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值