spring使用注解编写拦截器

springboot spring java 文章 2024-02-02 13:42 659 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群

相关文章
详细说说 Springboot ApplicationEvent 事件发布
怎么在jdk里指定 activeprofile呢
spring里使用静态方法获取HttpServeltRequest
SpringBoot里有多少种 ContextHolder 有分别有啥用
idea里设置activeprofile
随便看看
线上防疫题库正确答案 2932
线上防疫题库正确答案(多选题) 4825
微信设置不可以使用小程序(游戏小程序) 5634
adsense申请已经支付的订单回退的网址 3212
BT面板查看网站入口、账号密码的命令 6008
ucloud海外服务器超级优惠券 3274
根据您的消费情况,您的延停权益已发生变化,变更后的延停权益为延停额度20.00元 5831
为什么我们喜欢迈克尔杰克逊。 4163
阿里云com、cn域名续费优惠码(2020年5月可用) 3586
阿里云com、cn域名续费优惠码(2020年6月可用) 3606