所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在springboot之中所使用的拦截器与spring中的拦截器完全一样。
2.1基础拦截器操作
拦截器是一种aop操作实现,那么在aop之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可。
1.创建一个程序的控制器类:
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的实现表单定义:
<!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代码就实现完成了,随后需要编写一个拦截器对其进行控制。
为了更好的说明问题,现在讲拦截器定义在外包中
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.那么此时如果要想使用拦截器必须有一个拦截器的配置类。现在不在编写配置文件了,所有的配置直接通过一个类完成
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中讲解的拦截器代码那样进行各种验证规则的编写以及相应的错误提示输出。