笔记:SpringBoot实现拦截器

做笔记做笔记

笔记:SpringBoot实现拦截器_第1张图片

 

WebMvcConfigurer实现拦截器

 

SpringBoot2.0及Spring5.0中WebMvcConfigurerAdapter已被废弃,所以我们这里就用官方推荐的方式来实现:

<1>.直接实现WebMvcConfigurer

<2>.直接继承WebMvcConfigurationSupport

 

在这我只使用了第一种的方法,任性_(:з」∠)_,直接实现WebMvcConfigurer

 

1)创建CommonWebAppConfigurer.java

@Configuration
public class CommonWebAppConfigurer implements WebMvcConfigurer {
	
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 多个拦截器组成一个拦截器链
    	InterceptorRegistration r1 = registry.addInterceptor(new CommonInterceptor());
    	
    	// addPathPatterns 添加拦截
    	r1.addPathPatterns("/index");
    		
    	// excludePathPatterns 排除拦截
    	r1.excludePathPatterns("/login");

    }

}

org.springframework.web.servlet.config.annotation.InterceptorRegistration.addPathPatterns(String... patterns)

addPathPatterns 是添加拦截路径,参数支持多个路径。

org.springframework.web.servlet.config.annotation.InterceptorRegistration.excludePathPatterns(String... patterns)

excludePathPatterns 是添加不拦截的路径,参数支持多个路径。

 

添加拦截之后就是对拦截路径之后的处理,不处理你拦他干嘛ヽ(ー_ー)ノ

2)创建CommonInterceptor.java

public class CommonInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request,HttpServletResponse response, 
			Object handler) throws Exception {
		
		System.out.println(">>>CommonInterceptor>>>>>>>在请求处理之前进行调用");
		
		return true;// 只有返回true才会继续向下执行,返回false取消当前请求
	}

	@Override
	public void postHandle(HttpServletRequest request,HttpServletResponse response, 
			Object handler,ModelAndView modelAndView) throws Exception {
		
		System.out.println(">>>CommonInterceptor>>>>>>>请求处理之后进行调用");

	}

	@Override
	public void afterCompletion(HttpServletRequest request,HttpServletResponse response,
			Object handler, Exception ex)throws Exception {
		
		System.out.println(">>>CommonInterceptor>>>>>>>在整个请求结束之后被调用");
	
	}


}

路径被拦截之后

三个方法的不同之处:

1)preHandle(...):请求处理之前进行调用;

2)postHandlef(...):请求处理之后进行调用,但是在视图被渲染之前;

3)afterCompletion(...):在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行;

 

具体的操作的话,emmmm我想想(◐ˍ◑)

对了,你可以做个重定向,笑~

@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, 
		Object handler) throws Exception {
		
	System.out.println(">>>CommonInterceptor>>>>>>>在请求处理之前进行调用");
		
	response.sendRedirect(request.getContextPath() + "/login");
		
		
	return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}

这样你的被拦截路径就会被指向login登录页,当然这个是我的登录页。

 

以上就是我简单的拦截器的具体实现

你可能感兴趣的:(学习笔记)