java自定义注解拦截器
时间: 2024-04-30 20:14:20 浏览: 18
以下是一个简单的示例,演示了如何使用自定义注解和拦截器来实现拦截功能:
首先,定义一个自定义注解`NoNeedToken`,用于标记不需要进行拦截的方法或类:
```java
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface NoNeedToken {
}
```
然后,创建一个拦截器`TokenInterceptor`,实现`HandlerInterceptor`接口,并在`preHandle`方法中进行拦截逻辑的处理:
```java
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 判断方法上是否有NoNeedToken注解
if (handlerMethod.getMethodAnnotation(NoNeedToken.class) != null) {
return true; // 不需要拦截,直接放行
}
// 判断类上是否有NoNeedToken注解
if (handlerMethod.getBeanType().isAnnotationPresent(NoNeedToken.class)) {
return true; // 不需要拦截,直接放行
}
}
// 需要拦截的逻辑处理
// ...
return true; // 放行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 拦截后的处理
// ...
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 请求完成后的处理
// ...
}
}
```
最后,在Spring Boot的配置类中,将拦截器添加到拦截器链中:
```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 {
private final TokenInterceptor tokenInterceptor;
@Autowired
public WebConfig(TokenInterceptor tokenInterceptor) {
this.tokenInterceptor = tokenInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenInterceptor);
}
}
```
这样,当请求进入拦截器时,会根据方法或类上的`NoNeedToken`注解判断是否需要进行拦截。