玩转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则执行登陆逻辑,否则跳转到提示页面。

时间: 2024-10-26 13:31:10

玩转spring MVC(七)----拦截器的相关文章

Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法

拦截器:顾名思义,就是对请求进行拦截,做一些预处理.后处理或返回处理的操作 Spring MVC中使用拦截器的方法,继承HandlerInterceptorAdapter类,并根据需求实现其中的preHandle方法(预处理).postHandle方法(返回处理),afterCompletion方法(后处理). public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object han

spring mvc +cookie+拦截器功能 实现系统自动登陆

先看看我遇到的问题: @ResponseBody @RequestMapping("/logout") public Json logout(HttpSession session,HttpServletRequest request,HttpServletResponse response) { Json j = new Json(); if (session != null) { // session.invalidate(); session.removeAttribute(&q

[转载] Spring MVC - 处理器拦截器

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间

spring mvc 多拦截器

上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中有到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: 1.HandlerMapping 用于定位具体的Controller类我习惯叫pagehandle,我认为是模块分发modelfactory eg:implement 这个是比较标准,我继承过其他的HandlerMapping 但是实际自己使用还是从接口开始更好实现 public classSpringMvcExtendHandlerMa

Spring mvc登录拦截器

自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登录拦截,如下: spring-web.xml <mvc:interceptors> <!-- 配置登陆拦截器 --> <mvc:interceptor> <mvc:mapping path="/**"/> //拦截所有请求 <mvc:e

基于Spring MVC 实现拦截器

Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的,利用拦截器可以实现更加方便的数据验证处理. 1,认识拦截器 所谓的拦截器指的是在用户和具体操作的Action之间做了一个屏障,以保证提交到提交到Action的数据是真实有效的数据: 如果要想实现拦截器的操作处理,那么必须掌握"org.springframework.web.servlet.Handl

Spring MVC定义拦截器

拦截器: package sy.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyI

码农小汪-Spring MVC 处理器拦截器详解

处理器拦截器简介 spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理 常见应用场景 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记 录结束时间,从而得到该请求的处理

Spring MVC的拦截器

什么是拦截器? 拦截器是指通过统一拦截从浏览器发送到服务器的请求来完成我们对功能的增强. Java过滤器跟SpringMVC的拦截器有什么不同? 定义:拦截器是可以拦截我们配置的方法,并且在我们的方法请求前后去做一些处理,比如做字符编码,验证校验等. 而过滤器:是在javaweb中,你传入的request.response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有