springmvc的拦截器

本文详细介绍如何在SpringMVC中创建并注册拦截器,包括实现HandlerInterceptor接口,重写preHandle、postHandle及afterCompletion方法的具体步骤。同时,演示了如何通过检查用户会话来控制访问权限,以及在SpringBoot中进行拦截器注册的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建springMVC的拦截器需要实现org.springframework.web.servlet.HandlerInterceptor接口,
重写preHandle,postHandler,afterCompletion三个方法,如下:

package com.web.auction.interceptor;

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

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

import com.web.auction.pojo.Auctionuser;

@Component  //添加component注解,由容器托管该拦截器
public class CheckUserInterceptor implements HandlerInterceptor {
	//在进入controller方法前调用
	//返回true:放行--》执行controller方法--》postHandle方法--》return--》afterCompletion方法
	//返回false:拦截,执行不了controller方法
	//拦截器使用的 是代理模式,这里的Object handler是目标代理对象
	@Override 
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		//现获取登录用户,如果登录用户不为空,则放行,否则拦截
		HttpSession session = request.getSession();
		Auctionuser logUser = (Auctionuser) session.getAttribute("user");
		if(logUser==null) {
			response.sendRedirect("/login");//重定向到controller中的“/login”
			return false;
		}else {
			return true;
		}
	}
	
	@Override  
	//在执行完controller后return语句前调用
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}
	
	@Override  //在执行完controller后return语句后调用
		public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
				throws Exception {
			// TODO Auto-generated method stub
			HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
		}	
	
	
}

在springboot中,创建好拦截器之后还要进行注册
通过在以下配置文件中注册

package com.web.auction.config;

import java.util.ArrayList;
import java.util.List;

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.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.web.auction.interceptor.CheckUserInterceptor;

@Configuration  //该注解表明该类是一个配置类
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

	@Autowired
	private CheckUserInterceptor checkUserInterceptor;
	
	@Override //注册拦截器的方法
	public void addInterceptors(InterceptorRegistry registry) {
		//存放不拦截的url的集合
		List<String> patterns = new ArrayList<String>();  
		//所有静态资源和登录,注册,验证码有关的url都不拦截
		patterns.add("/css/**");
		patterns.add("/images/**");
		patterns.add("/js/**");
		patterns.add("/login");
		patterns.add("/toRegister");
		patterns.add("/defaultKaptcha");
		patterns.add("/dologin");
		patterns.add("/register");
		//addPathPatterns("/**")设置拦截的url,除了上述不拦截的url,其他所有url都拦截    //excludePathPatterns(patterns)排除拦截的url
		registry.addInterceptor(checkUserInterceptor).addPathPatterns("/**").excludePathPatterns(patterns);
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值