spring boot 攔截器的實現以及遇到的問題的解決方案
阿新 • • 發佈:2019-01-01
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的載入管理即可