springboot创建拦截器,自己定义一个拦截器类并实现***HandlerInterceptor***方法
public class LoginIntercepter implements HandlerInterceptor{
//目标方法执行之前
//此方法是在所有方法之前执行所以我们可以在次编写拦截的逻辑
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginuser");
if(user==null){
request.setAttribute("msg","请先登录");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}else{
return true;
}
}
@Override
public void (HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
拦截器创建好后并没有完成,还需要我们将拦截器类注册到springboot中才能生效。
另写一个配置类继承***WebMvcConfigurerAdapter***方法:
@Configuration
public class MyConfig extends WebMvcConfigurerAdapter {
public void addViewControllers(ViewControllerRegistry registry) {
//super.addViewControllers(registry);
registry.addViewController("/add").setViewName("pages-login");
}
@Bean
public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
//注册拦截器
//由于我们需要主动拦截一些访问,例如没有登录就想进入后台界面,我们需要拦截
@Override
public void addInterceptors(InterceptorRegistry registry) {
//new的是刚刚写好的拦截器类
registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/main.html")
.excludePathPatterns("/add","/login","/add/login");
}
//addPathPatterns()方法添加要拦截的访问地址。excludePathPatterns()方法是排除拦截的地址就是不拦截这些地址
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//不用处理静态资源
registry.addViewController("/login").setViewName("pages-login");
registry.addViewController("/main.html").setViewName("index");
}
};
return adapter;
}
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleRes();
}
}
上面我想拦截main.html。拦截后直接跳到登录界面并给出提示。拦截成功。