1. 程式人生 > >spring boot 攔截器的實現以及遇到的問題的解決方案

spring boot 攔截器的實現以及遇到的問題的解決方案

spring boot攔截器的實現

1、建立攔截器

  建立攔截器,實現HandlerInterceptor介面即可


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements
HandlerInterceptor{
@Autowired private BeanService service ; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub return false; } @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws
Exception { // TODO Auto-generated method stub } }

2、註冊攔截器

  註冊攔截器的實現


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;



@Configuration
@EnableWebMvc
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

    @Bean
    MyInterceptor  myInterceptor(){
        return new MyInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
        super.addInterceptors(registry);
        super.addInterceptors(registry);
    }
}

問題解析

1、bean載入的問題
  在攔截器中注入bean。然後在註冊攔截器的時候直接new或者是注入資料的時候會出現攔截器中的bean註冊失敗的問題,解決方案如MyWebMvcConfigurerAdapter程式碼片。新增一個方法去做攔截器載入,在方法上使用@bean去進行bean的載入管理即可