`

SpringBoot自定义拦截器

 
阅读更多

 

SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。
    DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。
SpringMVC的拦截器HandlerInterceptor接口对应提供了三个preHandle,postHandle,afterCompletion方法。preHandle在业务处理器处理请求之前被调用,
    postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。

 

在SpringBoot中使用拦截器首先需要实现HandlerInterceptor接口,然后将拦截器注册到MVC中,由MVC根据请求来执行不同的拦截器。

 

第一步:创建拦截器

 

package com.bjqdl.wzy.web.interceptors;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.bjqdl.wzy.core.ThreadLocalMap;
import com.bjqdl.wzy.core.UserContext;
import com.bjqdl.wzy.util.AssertUtil;
import com.bjqdl.wzy.util.json.JSONUtil;
import com.bjqdl.wzy.web.entity.User;
import com.bjqdl.wzy.web.service.UserInfoService;
import com.bjqdl.wzy.web.utils.HttpUtils;

public class UserInfoInterceptor implements HandlerInterceptor{

	private static final Logger logger = LoggerFactory.getLogger(UserInfoInterceptor.class);
	
	private UserInfoService userInfoService;
	public UserInfoInterceptor(UserInfoService userInfoService) {
		super();
		this.userInfoService = userInfoService;
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		logger.debug("UserInfoInterceptor.preHandle");
		String openid = request.getParameter("openid");
		if (request.getRequestURL().toString().contains("/user/")){
			logger.debug("注册用户!");
			return true;
		}
		if (!AssertUtil.isVal(openid)) {
			logger.error("用户信息不完整,请在url后追加用户信息 url?openid=xxxx");
			return false;
		}
		if (openid.equals(UserContext.getOpenID())) {
			return true;
		}
		ThreadLocalMap.reset();
		User user = this.userInfoService.getUser(openid);
		if (AssertUtil.isVal(user)) {
			ThreadLocalMap.put(UserContext.USER_CONTEXT, JSONUtil.parseJSON(user));
			ThreadLocalMap.put(UserContext.USER_CONTEXT_IP, HttpUtils.getIpAddress(request));
			return true;
		} else {
			return false;
		}
	}

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

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

	
}

 

 

第二步:注册到MVC中

自定义MVCConfig类,继承WebMvcConfigurerAdapter类,重现public void addInterceptors(InterceptorRegistry registry)方法,具体实现见代码

 

package com.bjqdl.wzy.web.config;

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

import com.bjqdl.wzy.web.interceptors.UserInfoInterceptor;
import com.bjqdl.wzy.web.service.UserInfoService;

@Configuration
public class MVCConfig extends WebMvcConfigurerAdapter {

	
	@Autowired
	private UserInfoService userInfoService;
	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry)
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new UserInfoInterceptor(userInfoService)).addPathPatterns("/**");
		super.addInterceptors(registry);
	}

}

 

 

注意:

         1、注解@Configuration是必备的;

         2、addPathPatterns("/**");方法用于通知过滤器针对那些url进行拦截

 

分享到:
评论

相关推荐

    SpringBoot 自定义拦截器 的 源代码

    SpringBoot 自定义拦截器 的 源代码 SpringBoot 自定义拦截器 一、自定义拦截器 二、编写控制器 三、添加拦截器对象,注入到容器的配置类中 另一种写法 四、最后application运行 我们对拦截器并不陌生,无论是 ...

    springboot自定义拦截器filter

    本示例中,我们看到的是一个自定义的Spring Boot Filter用于实现SSO(Single Sign-On)资源拦截的控制,旨在优化资源访问的安全性和效率。 首先,让我们深入了解什么是SSO。SSO是一种身份验证机制,允许用户在一个...

    SpringBoot的拦截器

    1. 创建自定义拦截器类:你需要创建一个实现了`HandlerInterceptor`接口的类,这个接口包含三个方法:`preHandle()`, `postHandle()`, 和 `afterCompletion()`。这些方法会在请求生命周期的不同阶段被调用。 ```...

    SpringBoot中自定义拦截器示例代码

    本篇将详细讲解如何在Spring Boot中创建并使用自定义拦截器,并提供相关的示例代码。 首先,我们需要了解Spring MVC中的拦截器(HandlerInterceptor)接口。该接口定义了三个方法: 1. `preHandle...

    CXF3.0+Spring3.2 自定义拦截器

    自定义拦截器在CXF中扮演着重要角色,它们允许我们在服务调用前后执行额外的逻辑,如日志记录、安全检查、性能监控等。这通过实现CXF提供的接口或继承特定的类来实现。以下是一些关键知识点: 1. **CXF拦截器基础**...

    springboot工程自定义response注解、自定义规范化返回数据结构

    本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...

    SpringBoot拦截器实现对404和500等错误的拦截

    首先,创建自定义拦截器类并实现`HandlerInterceptor`接口是实现拦截器功能的第一步。如示例代码所示,我们需要创建一个名为`ErrorInterceptor`的类,并在其中实现`preHandle`和`postHandle`方法。这两个方法都是在...

    10.为CXF服务器端添加自定义拦截器进行权限检查

    本文将深入探讨如何为CXF服务器端添加自定义拦截器以执行这样的权限验证。 首先,理解CXF(CXF: Apache CXF - A Next Generation JAXWS and JAX-RS API Implementation)是一个开源的Java框架,它用于创建和部署...

    SpringBoot拦截器原理解析及使用方法

    拦截器的使用为开发人员提供了灵活的请求处理方式,可以方便地在请求到达控制器之前和之后加入自定义的逻辑。掌握拦截器的使用,对于开发安全、高效、易于维护的Web应用是非常有帮助的。在实际开发中,合理设计拦截...

    springboot拦截器实现拦截器 权限校验,登录demo

    在Spring Boot应用中,拦截器(Interceptor)是一个强大的工具,用于在请求被处理之前或之后执行自定义逻辑。本文将详细介绍如何在Spring Boot中实现拦截器以进行权限校验和登录验证,通过一个简单的Demo来阐述整个...

    java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    在 SpringBoot 框架中,拦截器(Interceptor)可以用来拦截和处理请求。在上面的代码中,我们定义了一个名为 `AuthorizationInterceptor` 的拦截器,该拦截器用来拦截请求,并将用户信息存入 request 作用域中。 ``...

    Springboot引入拦截器并放行swagger代码实例

    首先,我们需要创建一个自定义的拦截器类,继承HandlerInterceptor接口,并实现其三个方法:afterCompletion、postHandle和preHandle。 afterCompletion方法在请求处理完成之后被调用,主要用于释放资源和记录日志...

    springboot拦截器代码

    在Spring Boot应用中,拦截器(Interceptor)是一个重要的组件,它允许我们在请求处理之前或之后执行自定义逻辑。Spring框架提供了HandlerInterceptor接口,用于实现拦截器功能。在本篇文章中,我们将深入探讨如何在...

    SpringBoot添加自定义拦截器的实现代码

    SpringBoot添加自定义拦截器的实现代码 Spring Boot是一种基于Java的Web应用程序框架,提供了许多实用的功能和工具来帮助开发者快速构建Web应用程序。其中,拦截器(Interceptor)是一种非常重要的组件,能够在请求...

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    在SpringBoot中,我们可以通过实现HandlerInterceptor接口创建自定义拦截器。 5. **登录验证**: 登录验证是Web应用中的核心功能,用于确保只有合法用户才能访问受保护的资源。通过过滤器或拦截器,我们可以检查每...

    SpringBoot拦截器实现+HTTPSdemo

    在本项目"SpringBoot拦截器实现+HTTPSdemo"中,我们深入探讨了Spring Boot框架如何通过自定义拦截器实现Web应用程序的高级控制,并且演示了如何配置和启用HTTPS以确保数据传输的安全性。以下是关于这些知识点的详细...

    Springboot拦截器+http的4中请求小demo

    首先,我们需要创建一个自定义的拦截器类,它需要继承Spring MVC的`HandlerInterceptor`接口或者`HandlerInterceptorAdapter`抽象类。`HandlerInterceptor`接口包含三个方法:`preHandle()`、`postHandle()`和`...

    Spring拦截器,高级参数绑定

    在Spring框架中,拦截器(Interceptor)是一种强大的工具,它允许开发者在请求处理前后执行自定义逻辑,例如日志记录、权限检查等。Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对...

    详解SpringBoot 解决拦截器注入Service为空问题

    自定义拦截器需要继承Spring MVC提供的`HandlerInterceptor`接口,并实现其三个方法:`preHandle`、`postHandle`和`afterCompletion`。在`MyInterceptor`类中,我们可以看到`networkProxyInfoService`被声明为`@...

    SpringBoot整合Mybatis完整详细版含注册、登录、拦截器配置

    - **配置拦截器**:在`WebMvcConfigurer`的实现类中,通过`addInterceptors`方法添加自定义的拦截器,定义拦截的URL规则和处理逻辑。 - **拦截器的执行流程**:拦截器会在Controller方法执行前后进行回调,可以...

Global site tag (gtag.js) - Google Analytics