Spring框架——拦截器(SpringMVC)

拦截器

介绍

Spring的Handler映射机制包含了Handler拦截器

使用handler拦截器,可以在某些

  • 请求应用特殊的功能
  • 检查权限
  • 防止表单重复提交

必须实现HandlerInterceptor接口

xml文件配置

拦截器的配置

	<!-- 基于注解驱动的SpringMVC -->
	<mvc:annotation-driven />
	<mvc:interceptors>
		<mvc:interceptor>
                        <!-- 过滤所有的Controller -->
			<mvc:mapping path="/**"/>
                        <!-- 不过滤的Controller -->
			<mvc:exclude-mapping path="/user/login"/>
			<bean class="com.myschool.user.LoginTimeInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

Java文件

  • 继承HandlerInterceptorAdapter
  • 重写方法preHandler
  • 重写方法postHandler
  • 重写方法afterCompletion(..)
public class LoginTimeInterceptor extends HandlerInterceptorAdapter {

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("afterCompletion");
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle");
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle");
		Calendar cal = Calendar.getInstance();
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        if (8 <= hour && hour < 17) {
            return true;
        }else{
        	response.sendRedirect("index.jsp");
			return false;
		}
//		return true;
	}

	
}

  • preHandler 在handler执行前调用

  • postHandler 在handler执行后调用

  • afterCompletion(..) 在整个请求完成后调用

Controller文件

@Controller
@RequestMapping("/user")
public class UserController {
	
	@RequestMapping("/login")
	public void login(){
		
	}
	
	@RequestMapping("/list")
	public void list(){
		System.out.println("list");
	}

}

posted @ 2020-08-27 22:29  不爱学习的小策  阅读(284)  评论(0编辑  收藏  举报