通過注解方式實現攔截器功能interceptor,通過注解實現對參數的值注入


 

一.實現注解式攔截器

1.首先實現自定義注解,該注解只能作用在方法

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

  

2.編寫自定義攔截器

 

參數說明 :
 Object handler:  調用的目標方法。


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());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM