第八章:基础拦截器-1. 基础拦截器

全部的开发之中拦截器必定是一个必需要使用的功能,利用拦截器能够更加有效的实现数据的验证处理,并且最为幸运的是在springboot之中所使用的拦截器与spring中的拦截器彻底同样。html

2.1基础拦截器操做java

拦截器是一种aop操做实现,那么在aop之中用户必定不须要去关注拦截器的存在,用户只须要按照本身已经习惯的处理方式进行代码的编写便可。web

1.建立一个程序的控制器类:spring

package cn.mldn.microboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.mldn.microboot.util.controller.AbstractBaseController;
import cn.mldn.microboot.vo.Member;

@Controller
public class MemberController extends AbstractBaseController {
	@RequestMapping(value = "/member_add_pre", method = RequestMethod.GET)
	public String memberAddPre() {
		return "member_add";
	}
	@RequestMapping(value = "/member_add", method = RequestMethod.POST)
	@ResponseBody
	public Object memberAdd(Member member) {
		return member ;
	}
}

2.定义一个member_add.html的实现表单定义:springboot

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<title>SpringBoot模版渲染</title>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body>
	<form th:action="@{/member_add}" method="post">
		用户编号:<input type="text" name="mid" value="101"/><br/>
		用户姓名:<input type="text" name="name" value="SMITH"/><br/>
		<input type="submit" value="表单提交"/>
	</form>
</body> 
</html>

3.此时一个正常的mvc代码就实现完成了,随后须要编写一个拦截器对其进行控制。mvc

为了更好的说明问题,如今讲拦截器定义在外包中app

package cn.mldn.util;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor {
	private Logger log = LoggerFactory.getLogger(MyInterceptor.class) ;
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		HandlerMethod handlerMethod = (HandlerMethod) handler ;
		this.log.info("【*** MyInterceptor.preHandle() ***】" + handlerMethod.getBean().getClass().getSimpleName());
		return true;	// 若是返回false表示不继续请求,若是返回true表示继续请求
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		HandlerMethod handlerMethod = (HandlerMethod) handler ;
		this.log.info("【*** MyInterceptor.postHandle() ***】" + handlerMethod.getBean().getClass().getSimpleName());
		this.log.info("【*** MyInterceptor.postHandle() ***】" + modelAndView);
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		this.log.info("【*** MyInterceptor.afterCompletion() ***】拦截处理完毕" );
	}

}

4.那么此时若是要想使用拦截器必须有一个拦截器的配置类。如今不在编写配置文件了,全部的配置直接经过一个类完成ide

package cn.mldn.microboot.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import cn.mldn.util.MyInterceptor;

@Configuration
public class MyWebApplicationConfig extends WebMvcConfigurerAdapter {	// 定义MVC配置
	@Override
	public void addInterceptors(InterceptorRegistry registry) {	// 进行拦截器的注册处理操做
		registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**") ;	// 匹配路径
		super.addInterceptors(registry);
	}
}

如今只要扎到了能够操做的控制器程序类,那么就能够依照在spring中讲解的拦截器代码那样进行各类验证规则的编写以及相应的错误提示输出。post

相关文章
相关标签/搜索