拦截器需要配合session使用,在登陆后,将登陆信息存入session中,然后在拦截器中判断并过滤请求。

1.首先新建一个拦截器类实现HandlerInterceptor接口如:

public class LoginHandlerInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("user");if(user!=null) return true;
        System.out.println("refuse access!");
        request.getRequestDispatcher("/index.html").forward(request,response);
        return false;
    }
}

 

 

2.创建一个配置类实现 WebMvcConfigurer 接口,并将上面的拦截器类添加进扫描配置中:

@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/main.html").setViewName("dashboard");
    }
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/index.html","/user/login","/cs/*","/img/*","/js/*"); 
  }
}

注意要放行静态资源、首页、登录相关的Controller。

addViewControllers()方法是将请求映射到真正的Controller中。


 posted on 2020-03-18 23:50  11HAN  阅读(607)  评论(0)    收藏  举报