spring使用注解编写拦截器

springboot spring java 文章 2024-02-02 13:42 608 0 全屏看文

AI助手支持GPT4.0

我的个人项目里有很多地方都要判断微信openid:

  1. openid是否为空

  2. openid字符串是否合法

  3. openid是否在缓存中存在

  4. openid是否在数据库中存在

  5. openid对应的用户是否在有效期内

这就导致每次写个方法都要写一堆校验。

于是就想使用一个注解+拦截器的做法去实现。

首先我定义了一个注解:

@Inherited
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnCheckUserInfo {
    boolean checkFormat() default true;
    boolean checkExistInDB() default  true;

    boolean checkNotExpired() default true;
}


然后在要使用的地方加上注解:

image.png


接着我开始写我的拦截器:

@Component
@Slf4j
public class CheckUserInfoInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private RedisCache redisCache;

    @Autowired
    private SanshugptChatKeysDao sanshugptChatKeysDao;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {//isAssignableFrom()判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口(isAssignableFrom()方法是判断是否为某个类的父类)

            //HandlerMethod 封装方法定义相关的信息,如类,方法,参数等
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            Method method = handlerMethod.getMethod();

            // 获取方法中是否包含注解
            AnnCheckUserInfo methodAnnotation = method.getAnnotation(AnnCheckUserInfo.class);
            String methodName = method.getName();
            if (methodAnnotation != null) {
                if (StrUtil.isNotBlank(methodName)) {
                   // 业务实现
				}
			}
		
		}
	}
}


最后注册我们的拦截器:

package cn.sanshu.webchat.core;
@Slf4j
@Component
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private CheckUserInfoInterceptor checkUserInfoInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        log.info("注册拦截");
        registry.addInterceptor(checkUserInfoInterceptor);
    }
}


这样就可以实现注解拦截器了。

-EOF-

AI助手支持GPT4.0


国内超级便宜服务器

摸鱼人热门新闻聚合

钻级赞助商 我要加入

开发者在线工具

第三方支付技术请加QQ群

相关文章
怎么在jdk里指定 activeprofile呢
DataSource: 'url' attribute is not specified and no embedded datasource
SpringBoot里有多少种 ContextHolder 有分别有啥用
spring项目输出当前的activeprofile
idea里设置activeprofile
随便看看
企业微信通讯录账号被管理员误/恶意删除,怎么办? 9389
问题? 8910
如何快速搭建抽奖助手小程序(无需代码知识) 6039
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 7343
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 6671
我的小程序广告收款主体是个体工商户,每个月邮寄两次发票很是麻烦,我年底的时候打包邮寄一次可以么? 5999
如何解决渲染层网络错误Failed to load media? 17276
小程序找号找回 释放昵称? 3151
我的小程序广告主收入5301,实际进账4406,是怎么回事呀? 3014
删除部分微信用户个人数据的通知,怎么删除? 6261