Spring MVC 中的拦截器的使用“拦截器基本配置” 和 “拦截器高级配置”
在Spring MVC中,你可以通过配置类来定义拦截器,并将其注册到Spring MVC框架中。以下是拦截器的基础配置和高级配置示例。
拦截器基础配置
首先,创建一个实现了HandlerInterceptor
接口的拦截器类:
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SimpleInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在请求处理之前进行调用
return true; // 如果返回false,则停止流程,api不会被调用
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 请求处理之后进行调用,但是在视图被渲染之前
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 在整个请求结束之后调用,也就是在DispatcherServlet渲染了视图执行
}
}
然后,在Spring 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 WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SimpleInterceptor()).addPathPatterns("/**");
// 这里可以配置拦截器的路径规则
}
}
拦截器高级配置
如果你需要根据不同的条件注册不同的拦截器,可以这样做:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SimpleInterceptor())
.addPathPatterns("/api/**") // 拦截api路径
.excludePathPatterns("/api/login"); // 排除登录接口
registry.addInterceptor(new AnotherInterceptor())
.addPathPatterns("/admin/**"); // 只拦截admin路径
}
在这个例子中,SimpleInterceptor
会拦截所有路径为/api/
的请求,并排除/api/login
接口。另一个拦截器AnotherInterceptor
只会拦截路径为/admin/
的请求。
评论已关闭