java1234开源博客系统
博客信息

SpringBoot 拦截器

0
发布时间:『 2018-06-30 22:00』  博客类别:SpringBoot  阅读(541)

web拦截器作用有权限控制,日志记录等等。SpringBoot 提供 HandlerInterceptor方便我们开发;


我们定义一个自定义拦截器 实现HandlerInterceptor接口,实现三个方法,preHandle是 请求处理之前调用,postHandle是请求处理之后并且视图渲染之前调用,afterCompletion请求结束之后并且视图渲染之后调用;

package com.java1234.interceptor;

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

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

/**
 * 自定义拦截器
 * @author Administrator
 *
 */
public class MyInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("========MyInterceptor preHandle 请求处理之前调用=================");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("========MyInterceptor postHandle 请求处理之后并且视图渲染之前调用=================");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("========MyInterceptor afterCompletion 请求结束之后并且视图渲染之后调用=================");
	}

}


我们再定义一个类继承WebMvcConfigurerAdapter,重写addInterceptors,我们把自定义拦截器添加到拦截器链中去。

package com.java1234.config;

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

import com.java1234.interceptor.MyInterceptor;

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); // 添加拦截器 以及 拦截器规则
		super.addInterceptors(registry);
	}

	
}


简单搞个控制器类测试下;

package com.java1234.action;

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

/**
 * 用户Controller
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value = "/user")
public class UserController {

	@ResponseBody
	@RequestMapping(value = "/login")
	public String login(){
		System.out.println("login");
		return "测试拦截器";
	}
}


项目配置文件配置下:

server:
  port: 80
  context-path: /


启动项目,运行 http://localhost/user/login


执行结果如下:

========MyInterceptor preHandle 请求处理之前调用=================

login

========MyInterceptor postHandle 请求处理之后并且视图渲染之前调用=================

========MyInterceptor afterCompletion 请求结束之后并且视图渲染之后调用=================


测试代码:

链接:https://pan.baidu.com/s/1iFDk37zpoAZcR5dbancAXw 密码:xi0s


关键字:   springboot     拦截器  
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有