拦截器在spring-mvc中的完整代码
时间: 2024-04-16 12:27:30 浏览: 111
Spring mvc拦截器实现原理解析
5星 · 资源好评率100%
下面是一个在Spring MVC中使用拦截器的完整代码示例:
首先,创建一个自定义的拦截器类 `CustomInterceptor`,实现 `HandlerInterceptor` 接口:
```java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行拦截处理,返回值表示是否继续执行后续的拦截器和处理器
System.out.println("PreHandle method is called");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 请求处理之后进行拦截处理,但在视图渲染之前
System.out.println("PostHandle method is called");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在视图渲染之后进行拦截处理
System.out.println("AfterCompletion method is called");
}
}
```
然后,在配置类或者配置文件中注册拦截器:
**使用Java配置类:**
```java
import org.springframework.beans.factory.annotation.Autowired;
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 {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customInterceptor)
.addPathPatterns("/**"); // 拦截所有路径
}
}
```
**使用XML配置文件:**
```xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> <!-- 拦截所有路径 -->
<bean class="com.example.CustomInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
```
在上述示例中,`CustomInterceptor` 类被注解为 `@Component`,以便被Spring容器扫描到。然后,在配置类或者配置文件中使用 `addInterceptors` 方法(Java配置类)或者 `<mvc:interceptors>` 元素(XML配置文件)来注册拦截器。
这样,当应用程序收到请求时,拦截器的 `preHandle` 方法会在请求处理之前被调用,`postHandle` 方法会在请求处理之后、视图渲染之前被调用,`afterCompletion` 方法会在视图渲染之后被调用。你可以根据自己的需求,在这些方法中编写相应的拦截逻辑。
阅读全文