springmvc 拦截器实现

拦截器说明

自定义的拦截器AuthInterceptor实现HandlerInterceptor接口
执行顺序:
1、preHandle:  进入方法之前被执行 //登录拦截,权限校验等等  //true表示通行 false表示拦截

2、postHandle: 方法执行之后,返回ModelAndView之前被执行 //设置页面公用参数操作

3、afterCompletion:方法执行后被执行 //处理异常、记录日记、清理资源

多个拦截器时顺序,看springmvc配置前后,前的先执行preHandle 然后是后的preHandle 接着是后面的postHandle after.. 前面的postHandle after... 先进去,后出来

如果是false被拦截时,post方法不会被执行,但是afterCompletion一定会被执行

 

拦截器实现

1、自定义类AuthInterceptor.java

package com.xue.utils;

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

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

/**
 * 配置自己的拦截器
 * @author xuexue
 *
 */
public class AuthInterceptor implements HandlerInterceptor {

	//方法执行后被执行
	//处理异常、记录日记、清理资源
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	//方法执行之后,返回ModelAndView之前被执行
	//设置页面公用参数操作
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	//进入方法之前被执行
	//登录拦截,权限校验等等
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		//true表示通行 false表示拦截
		return true;
	}

}

2、在springmvc声明自己配置的拦截器

	<!-- 拦截器实现 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截各种请求,包括二级目录 -->
			<mvc:mapping path="/**" />
			<!-- 登录页面不拦截 -->
			<mvc:exclude-mapping path="/user/login"/>
			<!-- 拦截器类bean -->	
			<bean class="com.xue.bbs.common.AuthInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

 

拦截器实现登录拦截功能

拦截器:

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

实现流程:

  1. 有一个登录页面,需要些一个controller访问页面
  2. 登录页面有一个提交表单的动作,需要在controller中处理
  3. 判断用户名密码是否正确
  4. 如果正确,设置session
  5. 返回登录成功,或者跳转到商品列表

 

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/loginCheck.action">
用户名:<input type="text" name="username" /><br>
密码:<input type="password" name="password" /><br>
<input type="submit">
</form>
</body>
</html>

controller页面:

@RequestMapping("loginCheck")
	public String isLogin(String username, String password, HttpServletRequest request) {
		if (username.equals("zhangsan")) {
			request.getSession().setAttribute("loginStatus", "success");
			return "redirect:/item/item";
		}
		return "login";
	}

AuthInterceptor页面(就修改了一个方法):

/* 
	 * 登录拦截,权限校验
	 * 拿到session,判断
	 * @return true不拦截,false拦截
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//获取session  ------ loginStatus
		Object loginStatus = request.getSession().getAttribute("loginStatus");
		
		//loginStatus为null说明没有设置session,拦截
		if (loginStatus == null)
			return false;
		
		//loginStatus 不为空,比较其值是否为 success 是不拦截(放行true) 否则拦截(不放行false)
		return loginStatus.toString().equals("success")  ? true : false;
	}

springmvc配置页面:

	<!-- 配置拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截所有请求,包括二级目录 -->
			<mvc:mapping path="/**"/>
			<!-- 配置不拦截目录 -->
			<mvc:exclude-mapping path="/user/login"/>
			<bean class="com.xue.bbs.common.AuthInterceptor"/> 
		</mvc:interceptor>
	</mvc:interceptors>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值