Spring MVC拦截器示例 之 XML和注解Java Config

在本Spring教程中,我们将学习在spring mvc应用程序中使用spring mvc拦截器。本教程非常简短,仅专注于Spring拦截器的配置和用法。

众所周知,拦截器是特殊的Web编程结构,每次发出某些预先配置的Web请求时都会被调用。由于它们的重要性,它们始终是产品生命周期中早期设计的最重要和最基本的功能部分。

拦截器通常在将其移交给控制器处理程序方法之前进行一些处理。

1.创建Spring MVC拦截器

1.1。通过实现HandlerInterceptor的Spring MVC拦截器

HandlerInterceptor接口定义了3种方法。

    1. preHandle(请求,响应,处理程序) –用于在移交给处理程序方法之前拦截请求。这里的handler是选择的处理程序对象来处理请求。
    2. postHandle(request,response,handler,modelAndView) –用于在处理程序完成请求处理但DispatcherServlet尚未呈现视图之后,拦截请求。
    3. afterCompletion(请求,响应,处理程序,异常)

–处理程序执行完成并且视图也呈现后,将调用它。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class DemoInterceptor implements HandlerInterceptor
{
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

		System.out.println("Inside pre handle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

		System.out.println("Inside post handle");
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception exception)
			throws Exception {

		System.out.println("Inside after completion");
	}
}

1.2。通过扩展HandlerInterceptorAdapter的Spring拦截器

HandlerInterceptorAdapterHandlerInterceptor接口的抽象适配器类。

它可以帮助我们仅实现所需的前置或后置处理程序方法。我们没有被迫实施所有方法。此抽象类中方法的所有默认实现均为“空”。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.ModelAndView;

public class DemoInterceptor extends HandlerInterceptorAdapter
{
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

		System.out.println("Inside pre handle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

		System.out.println("Inside post handle");
	}
}

2. Spring拦截器示例

2.1。Spring Web Maven依赖项

添加Spring 5 Web依赖关系以创建Spring MVC应用程序。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.6.RELEASE</version>
</dependency>

2.2。写Spring拦截器

package com.how2codex.interceptor;

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

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

public class DemoInterceptor implements HandlerInterceptor
{
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		System.out.println("Inside pre handle");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("Inside post handle");
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception exception)
			throws Exception {
		System.out.println("Inside after completion");
	}
}

2.3。在bean配置中配置spring拦截器

2.3.1。Spring拦截器XML配置

XML配置有助于添加将在其上调用拦截器的路径模式。另外,我们可以将拦截器配置为对所有Web请求都调用。

<!-- Configures Interceptors -->
<mvc:interceptors>

	 <!-- This XML will intercept all URIs -->
	 <bean class="com.how2codex.interceptor.DemoInterceptor"></bean>

	 <!-- This XML will apply interceptor to only configured URIs -->
	 <!--
	 <mvc:interceptor>
		  <mvc:mapping path="/users"></mvc:mapping>
		  <bean class="com.how2codex.interceptor.DemoInterceptor"></bean>
	 <mvc:interceptor>
	  -->
</mvc:interceptors>
2.3.2。Spring拦截器Java配置
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    DemoInterceptor demoInterceptor() {
         return new DemoInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(demoInterceptor());
    }

}

2.4。Demo

现在,如果我们启动服务器并点击URL:http:// localhost:8080 / firstSpringApplication / users,我们将在控制台输出中看到用拦截器方法编写的see语句。

下载给定的源代码以使用它,并更详细地了解Spring MVC拦截器。

学习愉快!

saigon has written 1440 articles

Leave a Reply