SpringMVC拦截器简单配置

web.xml代码

<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		
		<!-- 指定Spring配置文件位置 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:mybatis-config.xml, classpath:springmvc-servlet.xml</param-value>
		</init-param>
		
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<filter>  
	    <filter-name>encodingFilter</filter-name>  
	    	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
	    <init-param>  
	        <param-name>encoding</param-name>  
	        <param-value>UTF-8</param-value>  
	    </init-param>
	    <init-param>
		    <param-name>forceEncoding</param-name>  
		    <param-value>true</param-value>  
	    </init-param>
	</filter>  

 springmvc-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">

	<!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
	<context:component-scan base-package="com.ssm.*"></context:component-scan>
    
	<mvc:annotation-driven/>
	
	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
			</list>
		</property>
	</bean>
	
	<!-- 拦截器 -->  
    <mvc:interceptors>  
           <bean class="com.interceptor.MyInterceptor"/>
    </mvc:interceptors> 
	
	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 如果使用jstl的话,配置下面属性 -->
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>	
	</bean>
</beans>

拦截器代码

package com.interceptor;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.ssm.service.UserService;

public class MyInterceptor implements HandlerInterceptor{

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

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

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		
		System.out.println("进入拦截器....");
		
//		String url = request.getMethod();
//		System.out.println("getMethod:" + url);
//		打印getMethod:GET
		
//		String url2 = request.getRequestURI();
//		System.out.println("getRequestURI:" + url2);
//		打印getRequestURI:/04-day26-springmvc_mybatis/action/checkLogin
		
//		String url3 = request.getServletPath();
//		System.out.println("getServletPath:" + url3);
//		打印getServletPath:/action/checkLogin
		
//		StringBuffer url4 = request.getRequestURL();
//		System.out.println("getRequestURL:" + url4);
//		打印getRequestURL:http://localhost:8080/04-day26-springmvc_mybatis/action/checkLogin
		
//		String url = request.getContextPath();
//		System.out.println(url);
//		打印04-day26-springmvc_mybatis
		
		//判断Session缓存里面的user是否存在,如果存在则说明用户登入过,放行
		if(request.getSession().getAttribute("user") != null){
			System.out.println("用户已经登入过了...");
			return true;
		}else{
			//判断没有登入过的用户,是不是提交登入,如果是则放行
			if("/action/checkLogin".equals(request.getServletPath())){
				System.out.println("登入路径为" + request.getServletPath() +",正确,登入成功!");
				return true;
			//以上两者都不是,则是违法操作,进行拦截
			}else{
				System.out.println("------->你被拦截了...");
				//这里需要注意的是,拦截后如果用response.sendRedirect(arg0)返回页面,那么将不能用request.setAttribute("")传值;
				request.setAttribute("msg", "操作违法,请重新登入!");
				request.getRequestDispatcher("../index.jsp").forward(request, response);
				return false;
			}
		}
	}

	
}

猜你喜欢

转载自javaxxxd.iteye.com/blog/2208442