拦截器需要配合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
浙公网安备 33010602011771号