下面通过简单的拦截器例子实现登录检查:
/**
* @author Hugo
* @discription 登录检查
* 1、配置好拦截器要拦截哪些请求
* 2、把这些配置放入容器中
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* 目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录检查逻辑
HttpSession session = request.getSession();
Object objectSeesion = session.getAttribute("loginUser");
if(objectSeesion !=null)
{
//放行
return true;
}
//拒绝访问资源,因未登录,跳转登录页面
//response.sendRedirect("/login");//重定向登录页面,但是无法携带参数
request.setAttribute("message","请先登录再访问");
request.getRequestDispatcher("/login").forward(request,response);//转发请求,可携带请求域中内容
return false;
}
/**
* 目标方法执行完成以后
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/**
* 页面渲染之后
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
下面简单实现静态资源按定值规则放行功能:
/**
* @author Hugo=
* @discription
* 1、编写一个拦截器实现handlerinterceptor接口
* 2、将拦截器注册到容器组(实现WebMvcConfigurer的addInterceptors)
* 3、编写拦截规则(如果拦截所有请求资源,静态资源也会被拦截)
*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")//所有请求都被拦截,包括静态资源
.excludePathPatterns("/login");//放行的资源或请求
}
}
版权声明:本文为wangjiansui原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。