通过注解方式实现拦截器功能interceptor,通过注解实现对参数的值注入

一.实现注解式拦截器

1.首先实现自定义注解,该注解只能作用在方法上

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAn {}

2.编写自定义拦截器

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(handler instanceof HandlerMethod){
            HandlerMethod han = (HandlerMethod) handler;
            MyAn methodAnnotation = han.getMethodAnnotation(MyAn.class);
            Method method = han.getMethod();
            if(methodAnnotation!=null){
                System.out.println(method.getName());
                return true;
            }
        }
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("没有权限");
        return false;
    }
}

3.将该拦截器添加到拦截器配置中

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

二.实现注解将值注入到参数

1.自定义注解,作用于参数中

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyParam {}

2.编写自定义参数解析器

@Component
public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    @Override  //当扫描到注解为MyParam时执行
    public boolean supportsParameter(MethodParameter methodParameter) {
        return methodParameter.hasParameterAnnotation(MyParam.class);
    }
    @Override  //示例:将请求地址注入到该参数
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        HttpServletRequest nativeRequest = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
        String requestURI = nativeRequest.getRequestURI();
        Class<?> parameterType = methodParameter.getParameterType();
        if(parameterType.isAssignableFrom(String.class)){
            return requestURI;
        }
        return null;
    }
}

3.添加到参数解析器

@Configuration
public class MyAddArgumentResolvers extends WebMvcConfigurationSupport {
    @Override
    protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new MyHandlerMethodArgumentResolver());
    }
}


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值