Heim  >  Fragen und Antworten  >  Hauptteil

java - SpringBoot fügt einen benutzerdefinierten Interceptor hinzu, ruft ihn jedoch nicht auf

1. Frage:

要添加一个自定义处理Token的问题,现在实现了方法,却发现拦截器没有被调用。
我是在自定义的HandlerInterceptorAdapter里面重写了preHandle方法。并把这个自定义的HandlerInterceptorAdapter添加到了自定义的WebMvcConfigurerAdapter,在WebMvcConfigurerAdapter添加@Configuration注解,但是却没有被调用!

2. Code:
AccessTokenVerifyInterceptor des benutzerdefinierten HandlerInterceptorAdapter:

@Component
public class AccessTokenVerifyInterceptor extends HandlerInterceptorAdapter {
    
    private Logger logger = LoggerFactory.getLogger(AccessTokenVerifyInterceptor.class);
    
    @Autowired
    private FFAccessTokenService tokenService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO Auto-generated method stub
        
        logger.info("AccessToken executing ...");
        return true;    
    }
    
}

Angepasste WebMvcConfigurerAdapter-Klasse FFWebMvcConfigurer:

@Configuration
public class FFWebMvcConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // TODO Auto-generated method stub
        registry.addViewController("/error").setViewName("404.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
        super.addViewControllers(registry);    
    }
        
     @Override 
     public void configurePathMatch(PathMatchConfigurer configurer) { 
         configurer.setUseSuffixPatternMatch(false); 
         super.configurePathMatch(configurer); 
     }
     
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         
         registry.addInterceptor(new AccessTokenVerifyInterceptor())
                  .addPathPatterns("/**")
                  .excludePathPatterns("/access-token");
         
         super.addInterceptors(registry);
         
         System.out.println("开始开始咯。。。。");    
    } 
}

3. Ich hoffe, dass mir alle Meister einen Rat geben können, danke!

PHP中文网PHP中文网2667 Tage vor1006

Antworte allen(4)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-06-30 09:56:03

    /**去掉一个*试试

    Antwort
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-30 09:56:03

    在启动类加上
    @ServletComponentScan

    Antwort
    0
  • 阿神

    阿神2017-06-30 09:56:03

    那你应该把 HandlerInterceptorAdapter 贴出来看看
    还有就是 2 中那个 @Component 注解 是没有意义的。

    Antwort
    0
  • 欧阳克

    欧阳克2017-06-30 09:56:03

    不会啊,按照你的代码写了一个简单的Demo,拦截器是可以调用到的。

    @Configuration
    public class FFWebMvcConfigurer extends WebMvcConfigurerAdapter {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/error").setViewName("404.html");
            registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
            super.addViewControllers(registry);
        }
    
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
            configurer.setUseSuffixPatternMatch(false);
            super.configurePathMatch(configurer);
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
    
            registry.addInterceptor(new AccessTokenVerifyInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/access-token");
    
            super.addInterceptors(registry);
    
            System.out.println("开始开始咯。。。。");
        }
    
    }
    
    public class AccessTokenVerifyInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle...");
            return true;
        }
    
    }

    Antwort
    0
  • StornierenAntwort