不讲废话,全程干货,0基础带你学习SpringMVC拦截处理器
【摘要】 1 工作原理流程图 2 Spring Web MVC 的处理器拦截器HandlerInterceptor类似Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。HandlerInterceptor接口定义了如下方法: preHandle该方法将在请求处理之前进行调用,只有当该方法返回true时,才会继续调用下一个Interceptor的preHandle(),如果已...
1 工作原理流程图
2 Spring Web MVC 的处理器拦截器
- HandlerInterceptor
类似Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
HandlerInterceptor接口定义了如下方法:
preHandle
该方法将在请求处理之前进行调用,只有当该方法返回true时,才会继续调用下一个Interceptor
的preHandle()
,如果已是最后一个Interceptor
就会是调用当前请求的Controller
postHandle
该方法将在请求处理后,DispatcherServlet
进行视图返回渲染之前进行调用,可以在这个方法中对Controller
处理之后的ModelAndView
对象进行操作(比如这里加入公用信息以便页面显示)
2.3 afterCompletion
该方法也是需要当前对应的Interceptor
的preHandle
方法的返回值为true
时才会执行,该方法将在整个请求结束之后,也就是在DispatcherServlet
渲染了对应的视图之后执行
用于资源清理
3 拦截器配置
3.1 针对某种mapping拦截器配置
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="handlerInterceptor1"/>
<ref bean="handlerInterceptor2"/>
</list>
</property>
</bean>
<bean id="handlerInterceptor1"class="springmvc.intercapter.HandlerInterceptor1"/>
<bean id="handlerInterceptor2"class="springmvc.intercapter.HandlerInterceptor2"/>
3.2 针对所有mapping配置全局拦截器
<!--拦截器 -->
<mvc:interceptors>
<!--多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.sss.filter.HandlerInterceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.sss.filter.HandlerInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
4 实践
用户访问其他页面时,从Seesion中获取到用户,未登录则重定向到登录页面。
Public class LoginInterceptor implements HandlerInterceptor{
@Override
Public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//如果是登录页面则放行
if(request.getRequestURI().indexOf("login.action")>=0){
return true;
}
HttpSession session = request.getSession();
//如果用户已登录也放行
if(session.getAttribute("user")!=null){
return true;
}
//用户没有登录挑战到登录页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)