• 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");
    	}
    
    }
    
    
  • 相关阅读:
    基于python内置方法进行代码混淆
    python-__getattr__ 和 __getattribute__
    python-flask学习
    python-创建进程的三种方式
    python-property、__get__、__set__
    call apply bind
    【算法】js实现最短时间走完不同速度的路程
    图片懒加载实现
    MoonLight可视化订单需求区域分析系统前端
    前端代码基本命名规范和格式规范
  • 原文地址:https://www.cnblogs.com/occlive/p/13574406.html
Copyright © 2020-2023  润新知