SpringMVC(拦截器、登录拦截器)

拦截器开发流程

1、创建拦截器
/**
 * 自定义拦截器
 * @author Steven
 *
 */
public class MyInterceptor1 implements HandlerInterceptor {

	//在Controller方法执行后被执行
	//处理异常、记录日志
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("MyInterceptor1.afterCompletion.....");
	}

	//在Controller方法执行后,返回ModelAndView之前被执行
	//设置或者清理页面共用参数等等
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("MyInterceptor1.postHandle.....");
	}

	//在Controller方法执行前被执行
	//登录拦截、权限认证等等
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		
		System.out.println("MyInterceptor1.preHandle.....");
		
		//返回true放行,false拦截
		return true;
	}

}
2、配置拦截器(在springmvc.xml中配置)
<!-- 拦截器定义 -->
	<mvc:interceptors>
		<!-- 定义一个拦截器 -->
		<mvc:interceptor>
			<!-- path配置</**>拦截所有请求,包括二级以上目录,</*>拦截所有请求,不包括二级以上目录 -->
			<mvc:mapping path="/**"/>
			<bean class="com.itheima.springmvc.interceptor.MyInterceptor1" />
		</mvc:interceptor>
		
		<!-- 定义一个拦截器 -->
		<mvc:interceptor>
			<!-- path配置</**>拦截所有请求,包括二级以上目录,</*>拦截所有请求,不包括二级以上目录 -->
			<mvc:mapping path="/**"/>
			<bean class="com.itheima.springmvc.interceptor.MyInterceptor2" />
		</mvc:interceptor>
	</mvc:interceptors>
3、测试

总结:

  • preHandle 按拦截器定义顺序调用
  • postHandler 按拦截器定义逆序调用
  • afterCompletion 按拦截器定义逆序调用
  • postHandler 在拦截器链内所有拦截器返回成功调用
  • afterCompletion 只有prehandle返回true才调用

拦截器案例应用,登录拦截器

思路

1、有一个登录页面,需要写一个controller访问页面
2、登录页面有一提交表单的动作。需要在controller中处理。

  • 判断用户名密码是否正确
  • 如果正确 想session中写入用户信息
  • 返回登录成功,或者跳转到商品列表

3、拦截器。

  • 拦截用户请求,判断用户是否登录
  • 如果用户已经登录。放行
  • 如果用户未登录,跳转到登录页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/user/login.action">
用户名:<input type="text" name="username" /><br>
密码:<input type="password" name="password" /><br>
<input type="submit">
</form>
</body>
</html>

UserController.java

/**
 * 登录拦截器
 * @author Steven
 *
 */
@Controller
@RequestMapping("user")
public class UserController {
	
	/**
	 * 跳转登录页面
	 * @return
	 */
	@RequestMapping("toLogin")
	public String toLogin(){
		return "login";
	}
	
	/**
	 * 用户登录
	 * @return
	 */
	@RequestMapping("login")
	public String login(String username,String password,HttpSession session){
		
		String result = "login";
		
		//断定用户是否允许登录
		if(username != null){
			session.setAttribute("username", username);
			//登录成功,跳转商品列表
			result = "redirect:/itemList.action";
		}
		return result;
	}
}

LoginInterceptor.java拦截器

package com.java.interceptor;

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

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 登录拦截器
 * @author Steven
 *
 */
public class LoginInterceptor implements HandlerInterceptor {

	//方法执行后被执行
	//处理异常,清资源,记录日志等等
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}

	//方法执行之后,返回ModelAndView之前被执行
	//设置页面的共用参数等等
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
	}

	//进入方法前被执行
	//登录拦截,权限验证等等
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		//判断用户有没有登录
		Object object = request.getSession().getAttribute("username");
		if(object == null){
			response.sendRedirect(request.getContextPath() + "/user/toLogin.action");
		}
		//true放行,false拦截
		return true;
	}

}

在springmvc.xml配置拦截器

<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截所有请求,包括二级以上项目 -->
			<mvc:mapping path="/**"/>
			<!-- 配置不拦截 -->
			<mvc:exclude-mapping path="/user/**"/>
			<bean class="com.java.interceptor.LoginInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值