第八章:基礎攔截器-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

相關文章
相關標籤/搜索