zoukankan      html  css  js  c++  java
  • 玩转spring MVC(七)----拦截器

    继续在前边的基础上来学习spring MVC中拦截器的使用,下面通过一个例子来实现(完整项目在这里下载:http://download.csdn.net/detail/u012116457/8433425)。

    首先在项目中添加interceptor-servlet.xml来配置拦截器,当然,必须在web.xml中配置在tomcat启动时加载,如下:

     <!--1.配置spring分发器(是总的控制中心  被拦截的url会汇聚到该servlet) -->
    	<servlet>
    	    <servlet-name>springmvc</servlet-name>  
    	    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	    <!--配置spring上下文  (从该目录下加载spring mvc的配置文件) -->
    	    <init-param>
    	       <param-name>contextConfigLocation</param-name>
    	       <param-value>/WEB-INF/classes/spring/*servlet.xml</param-value>
    	    </init-param>
    	    <load-on-startup>1</load-on-startup>  <!-- tomcat启动后立即加载 -->
    	</servlet>
    这个拦截器主要实现的功能是在页面请求登陆时,如果在允许登陆时时间范围内,则正常执行,否则跳转到某一特定页面。

    interceptor-servlet.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:util="http://www.springframework.org/schema/util"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd                 http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd                 
        http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.0.xsd">
      
      <!-- 拦截器 -->
    	<mvc:interceptors>
    	    <!-- 多个拦截器,顺序执行 -->
    	    <!-- 拦截器1 登陆拦截 -->
    	    <mvc:interceptor>
    	       <mvc:mapping path="/login/login.do" /><!-- 可以写多个,如果为/*,将拦截所有的Controller -->
    	       <bean class="module.interceptor.LoginInterceptor">
    	            <!--startTimeStr 属性指定允许登陆的开始时间-->  
                    <property name="startTimeStr">  
                        <value>07:00:00</value>  
                    </property>  
                    <!--endTimeStr 属性指定允许登陆的结束时间-->  
                    <property name="endTimeStr">  
                        <value>23:00:00</value>  
                    </property>  
                    <!--outTimePageUrl  属性指定不在时间范围内时,提示页面的URL-->  
                    <property name="outTimePageUrl">  
                        <value>http://localhost:8080/springMVC/index.jsp  
                        </value>  
                    </property>  
    	       </bean>
    	    </mvc:interceptor>
    	</mvc:interceptors>
    	
    </beans>

    请求被拦截后处理类:

    package module.interceptor;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * 登陆操作的拦截器
     * 
     * @author Administrator
     * 
     */
    public class LoginInterceptor implements HandlerInterceptor {
    
    	private String startTimeStr;
    	private String endTimeStr;
    	private String outTimePageUrl;
    
    	@Override
    	public void afterCompletion(HttpServletRequest arg0,
    			HttpServletResponse arg1, Object arg2, Exception arg3)
    			throws Exception {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
    			Object arg2, ModelAndView arg3) throws Exception {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
    			Object arg2) throws Exception {
    		SimpleDateFormat hms=new SimpleDateFormat("HH:mm:ss");
    		Date startTimeDat=hms.parse(startTimeStr);
    		Date endTimeDat=hms.parse(endTimeStr);
    		Date now = new Date();
    		String nowHMS = hms.format(now);
    		now=hms.parse(nowHMS);
    		
    	    if(startTimeDat.before(now)&&now.before(endTimeDat)){   //当前时间在规定的时间范围内
    	    	System.out.println("当前时间允许登陆");
    	    	return true;			
    		}else{
    			System.out.println("当前时间不允许登陆");
    			response.sendRedirect(outTimePageUrl); // 返回提示页面  
    			return false;
    		}
    	}
        //get和set方法
    	public String getStartTimeStr() {
    		return startTimeStr;
    	}
    
    	public void setStartTimeStr(String startTimeStr) {
    		this.startTimeStr = startTimeStr;
    	}
    
    	public String getEndTimeStr() {
    		return endTimeStr;
    	}
    
    	public void setEndTimeStr(String endTimeStr) {
    		this.endTimeStr = endTimeStr;
    	}
    
    	public String getOutTimePageUrl() {
    		return outTimePageUrl;
    	}
    
    	public void setOutTimePageUrl(String outTimePageUrl) {
    		this.outTimePageUrl = outTimePageUrl;
    	}
    
    }
    
    登陆页面的控制类如下:

    package module.controller;
    
    import javax.annotation.Resource;
    
    import module.entity.User;
    import module.service.LoginService;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    @RequestMapping("/login")
    public class LoginController {
    
    	private static String INDEX = "module/jsp/index";
    	private static String LOGIN = "module/jsp/login";
    
    	
    	//@Autowired() @Qualifier("loginServiceImpl2")  
    	@Resource(name="loginServiceImpl2")
    	private LoginService loginService;
    	
    	@RequestMapping(value = "/login.do", method = RequestMethod.POST)
    	public String login(User user) {
    		System.out.println(user.getName());
    		User u = loginService.findByName(user.getName());
    		if (u != null)
    			System.out.println(u.getPassword());
    		if ("admin".equals(user.getName()))
    			return INDEX;
    		return LOGIN;
    	}
    
    }
    

    当客户端发来请求:http://localhost:8080/springMVC/login/login.do时,请求会被拦截,提交给LoginInterceptor进行处理,返回true则执行登陆逻辑,否则跳转到提示页面。


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    luogu P4284 [SHOI2014]概率充电器 期望 概率 树形dp
    luogu P5161 WD与数列 SAM 线段树合并 启发式合并
    5.5 省选模拟赛 B Permutation 构造 贪心
    luogu P3761 [TJOI2017]城市 树的直径 bfs
    一本通 1783 矩阵填数 状压dp 容斥 计数
    CF R638 div2 F Phoenix and Memory 贪心 线段树 构造 Hall定理
    BSOJ 5445 -- 【2018雅礼】树 prufer序列 dp
    CF1037H Security 线段树合并 SAM
    c++11の顺序容器
    c++11の关联容器
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931769.html
Copyright © 2011-2022 走看看