SpringBoot如何自定义拦截器

前言

mvc这一块的功能有点啰嗦了,写起来如果只是配置的话,其实很简单,还是贴出来官方文档地址,后面就不会的单独说这块的内容了。
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config

实现

第一种实现是基于https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-config-interceptors这一块的内容如下。实际根据项目调整即可,没什么额外好说的。

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor());
        registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
    }
}

第二种实现方式比较简单,但是没有第一种灵活。第一种可以指定拦截地址以及排除的地址,第二种实现很简单,但是全局拦截。
直接继承org.springframework.web.servlet.handler.HandlerInterceptorAdapter, 然后把实现类加入到Spring容器中即可,一个简单的例子如下, 比如我们的认证拦截器就可以在这里进行处理,然后将用户信息放入到上下文中,在处理结束的时候再移除。

@Slf4j
@Component
public class JwtAuthorizationTokenFilter extends HandlerInterceptorAdapter {
    /**
     * 前置校验
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 	    // 塞入最新用户数据
        UserContextUtil.setUserClaim(storeUserClaim);
        MDC.put(USER_ID, storeUserClaim.getUserId());
	}
    /**
     * 执行器结束
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable
            Exception ex) throws Exception {
        // 移除用户信息
        UserContextUtil.removeUserClaim();
        MDC.remove(USER_ID);
    }
}

项目实现

当然在实际项目中,会有更加复杂的实现,也会更接近实用性。
这里有一个比较复杂的例子,是结合整个jwt和拦截器做认证拦截和用户信息处理的,后续会更新文档。
https://github.com/dongfangding/ddf-common/blob/dev/ddf-common-jwt/src/main/java/com/ddf/boot/common/jwt/filter/JwtAuthorizationTokenFilter.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值