SpringMVC学习笔记03_拦截器

文章目录

  • 拦截器和过滤器的区别
  • 自定义拦截器的步骤
    • 第一步:编写一个普通类实现 `HandlerInterceptor` 接口
    • 第二步:配置拦截器
  • 多个拦截器的执行顺序
  • 拦截器的简单案例(验证用户是否登录)
    • - 实现思路
    • - 控制器代码
    • - 拦截器代码

拦截器和过滤器的区别

过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用。
拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。
过滤器在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是 jsp,html,css,image 或者 js 是不会进行拦截的。

自定义拦截器的步骤

  • 它是 AOP 思想的具体应用。

第一步:编写一个普通类实现 HandlerInterceptor 接口

public class HandlerInterceptorDemo1 implements HandlerInterceptor {
	/*执行方法前执行*/
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse 
		response, Object handler)
		throws Exception {
		System.out.println("preHandle 拦截器拦截了");
		return true; 
	}
	/*执行方法中,在return的前一步执行*/
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, 
						   Object handler,ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle 方法执行了");
	}
	/*在执行方法return之后执行 : 一般用于释放资源*/
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
								Object handler, Exception ex)
		throws Exception {
		System.out.println("afterCompletion 方法执行了");
	} 
}

第二步:配置拦截器

<!-- 配置拦截器 --> 
<mvc:interceptors> 
	<mvc:interceptor>
		<!-- 注册拦截器对象 -->
		<bean class="cn.itcast.demo1.MyInterceptor2"/>
		<!-- 用于指定要拦截的 url --> 
		<mvc:mapping path="/**" />        
		 <!-- 用于指定排除的 url-->
		<mvc:exclude-mapping path=""/>   
	</mvc:interceptor>
</mvc:interceptors>

多个拦截器的执行顺序

SpringMVC学习笔记03_拦截器_第1张图片

拦截器的简单案例(验证用户是否登录)

- 实现思路

SpringMVC学习笔记03_拦截器_第2张图片

- 控制器代码

//登陆页面
@RequestMapping("/login")
public String login(Model model)throws Exception{
	return "login"; 
}
//登陆提交
//userid:登入账号,pwd:密码
@RequestMapping("/loginsubmit")
public String loginsubmit(HttpSession session,String userid,String pwd)throws Exception{
	//向 session 记录用户身份信息
	session.setAttribute("activeUser", userid);
	return "redirect:/main.jsp"; 
}
//退出
@RequestMapping("/logout")
public String logout(HttpSession session)throws Exception{
	//session 过期
	session.invalidate();
	return "redirect:index.jsp"; 
}

- 拦截器代码

public class LoginInterceptor implements HandlerInterceptor{
	@Override
	Public boolean preHandle(HttpServletRequest request,HttpServletResponse response, 
							Object handler) throws Exception {
		//如果是请求登录页面则放行
		if(request.getRequestURI().indexOf("login.action")>=0){
			return true; 
		}
		HttpSession session = request.getSession();
		//如果用户已登录也放行
		if(session.getAttribute("user")!=null){
			return true; 
		}
		//用户没有登录则跳转到登录页面
		request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
		return false; 
	} 
}

你可能感兴趣的:(笔记,过滤器,java,struts2,jsp,servlet)