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; } } } }