美文网首页
Spring boot 之interceptor

Spring boot 之interceptor

作者: 黑曼巴yk | 来源:发表于2020-09-25 01:31 被阅读0次

前言

Interceptor 和Filter都属于AOP思想。Filter定义在javax.servlet中。而Interceptor定义在springframework中。并且能够深入到方法的前后,使用起来更大的弹性。

使用

@Slf4j
@Component
public class RequestInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // do somting
        return true;
    }
}

注册

@Configuration
public class MambaWebmvcConfiguration implements WebMvcConfigurer {
    @Autowired
    RequestInterceptor requestInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(requestInterceptor).addPathPatterns("/**");
       
    }
}

注意:不要抄网上代码: registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**");
使用new 格式不会Spring接管,所以在内部使用Autoware注解不生效

实践(基于注解配置权限拦截)

  1. 创建注解
/**
 * 在需要登录验证的Controller的方法上使用此注解
 */
@Target({ElementType.METHOD})// 可用在方法名上
@Retention(RetentionPolicy.RUNTIME)// 运行时有效
public @interface LoginRequired {
    
}
  1. 创建拦截器
public class AuthorityInterceptor extends HandlerInterceptorAdapter{
    
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 如果不是映射到方法直接通过
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        // ①:START 方法注解级拦截器
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        // 判断接口是否需要登录
        LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);
        // 有 @LoginRequired 注解,需要认证
        if (methodAnnotation != null) {
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等
            System.out.println("====================================");
            return true;
        }
        return true;
    }
}

相关文章

网友评论

      本文标题:Spring boot 之interceptor

      本文链接:https://www.haomeiwen.com/subject/epdxuktx.html