SpringMVC_day03_1(拦截器的配置1)

有的网页允许游客访问,但是当游客要去 回复一些评论,评论一些文章的时候,会将请求拦截下来并进行判断,判断是否登录。

1.先编写拦截器

1.先编辑拦截器
public class MyInterceptor implements HandlerInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("preHandle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("postHandle");

	}

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("afterCompletion");

	}

}


2 在springmvc.xml中配置拦截器
3.2.1 拦截全部控制器
    <!-- 拦截器 -->
    <mvc:interceptors>
    		<bean class="com.bjsxt.interceptor.MyInterceptor"></bean>
    </mvc:interceptors>
3.2.2 拦截某几个控制器
3.2.2.1 <mvc:mapping/> path表示url被HandlerMapping解析后结果
    <!-- 拦截器 -->
    <mvc:interceptors>
    	<mvc:interceptor>
    		<mvc:mapping path="/demo"/>
    		<mvc:mapping path="/demo1"/>
    		<mvc:mapping path="/demo2"/>
    		<bean class="com.bjsxt.interceptor.MyInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>

2. preHandler()

4.1 返回值是否放行.true放行,false阻止.如果阻止还可以利用 重定向或请求转发到其他页面
4.2 第三个参数:
    4.2.1 实际类型HandlerMethod
    4.2.2 获取到拦截器的方法所有信息

	boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2)


		HandlerMethod hm = (HandlerMethod)arg2;
		Method method = hm.getMethod();
		System.out.println(method.getName());获取方法名
		if(method.getName().equals("demo")){
			System.out.println("拦截的是demo");
		}else{
			System.out.println("不是demo");
			
	}


3. postHandle( ) 能对控制器执行的结果,进行二次过滤
5.1 第三个参数:HandlerMethod
5.2 第四个参数:ModelAndView 
5.2.1 取到跳转到哪个视图
5.2.2 对作用域内值修改
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3){
		// 1.获得视图名称
		System.out.println("视图名称:"+arg3.getViewName()); //视图名称:index
		// 2.获得作用域
		Map<String,Object> map = arg3.getModel();
		// 3.重新设置作用域
		map.put("msg", map.get("msg").toString().replace("中国", "**"));
}

4. afterCompletion( )


6.1 无论是否出现异常都执行.
	6.1.2 出现异常会跳过postHandle()方法,和jsp的解析class文件的过程
6.2 第三个参数:HandlerMethod
6.3 第四个参数:Exception,如果控制器中出现异常,参数不为null
6.4 此方法常用在日志记录功能
 if(arg3!=null){
	Logger logger = Logger.getLogger(MyInterceptor.class);
	logger.error(arg3.getMessage());// 获得异常信息
}
7. 添加控制器后执行顺序
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值