场景:自定义注解实现校验,拦截,防重复提交等,典型如权限校验;喜欢的点个赞
实现:拦截器+自定义注解
//01 自定义注解
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UserIdAnnotation {
String userId() default "";
}
//02 实现拦截器(别忘步骤三)
@Slf4j
@Component
public class UserIdMethodInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
UserIdAnnotation methodAnnotation = handlerMethod.getMethod().getAnnotation(UserIdAnnotation.class);
if (methodAnnotation != null) {
String userId = methodAnnotation.userId();
log.info("当前拦截userId:" + userId);
/**
* 1.查redis,没查到返回false拦截; 2.查库 3静态配置?
*/
/**
* 自定义业务处理
*/
if (!"yy".equals(userId)) {
return false;
}
}
return true;
}
}
//03 添加拦截器
@Configuration
public class UserIdMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserIdMethodInterceptor()).addPathPatterns("/**");
}
}