拦截器与过滤器相似,但拦截器只能拦截控制器类的方法,而过滤器可以拦截所有请求。
自定义拦截器
------ 实现用户登录后跳转main.jsp页面,否则无法进入main.jsp页面
1、新建类实现HandlerInterceptor
package com.yyl.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 DemoInterceptor implements HandlerInterceptor{
// jsp执行完成后执行,记录日志、异常
@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
}
// 进入控制器前执行,return false,无法进入控制器
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {
//System.out.println("执行拦截器");
String uri = req.getRequestURI();
System.out.println(uri);
if(uri.equals("/SpringMVC03-login/Login")){ // 验证是否执行进入登录控制器
return true;
}else{
//System.out.println("other");
Object obj = req.getSession().getAttribute("user");
if(obj!=null){ // 登录成功则进行跳转
return true;
}
resp.sendRedirect("/SpringMVC03-login/login.jsp"); // 否则重定向到登录页面
return false;
}
}
}
2、springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描注解 -->
<context:component-scan base-package="com.yyl.controller"></context:component-scan>
<!-- 注册驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源 -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<!-- 配置MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- <property name="maxUploadSize" value="1024"></property> -->
</bean>
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 拦截所有 -->
<bean id="interceptor" class="com.yyl.interceptor.DemoInterceptor"></bean>
<!-- 拦截指定的uri请求
</mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/demo"/>
<mvc:mapping path="/demo1"/>
<mvc:mapping path="/demo2"/>
<bean class="com.yyl.interceptor.DemoInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors> -->
<!-- 异常 解析器-->
<bean id="exception" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings" >
<props>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error.jsp</prop>
</props>
</property>
</bean>
</beans>
3、controller
import javax.servlet.http.HttpSession;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.yyl.pojo.User;
@Controller
public class DemoController {
@RequestMapping("Login")
public String loginMethod(User u,HttpSession session){
//System.out.println("进入login");
if(u.getUsername().equals("admin") && u.getPassword().equals("123")){//简单验证
session.setAttribute("user", u);
return "/WEB-INF/page/main.jsp";
}else{
return "login.jsp";
}
}
@RequestMapping("{page}")
public String main(@PathVariable String page){
return page;
}
}