广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot配置拦截器实现过程详解
  • 164
分享到

SpringBoot配置拦截器实现过程详解

SpringBoot配置拦截器SpringBoot拦截器 2022-11-13 18:11:38 164人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录如何配置拦截器拦截器设置容易出现的问题如何取消拦截操作实例-登录验证如何配置拦截器 step1: 自定义拦截器 public class MyInterceptor imple

如何配置拦截器

step1: 自定义拦截器


public class MyInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
    
    @Override
    public boolean preHandle(httpservletRequest request, HttpServletResponse response, Object handler) throws Exception {
        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 {
    }
}

step2:配置拦截器

@Configuration
public class MyInterceptorConfig extends WEBmvcConfigurationSupport {
    @Override
    protected void addInterceptors(InterceptorReGIStry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   registry.addResourceHandler("
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UnInterception {
}

step2:修改拦截器MyInterceptor中的preHandle方法


@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    UnInterception unInterception = method.getAnnotation(UnInterception.class);
    if(null != unInterception) {
        logger.info("不需要拦截,可以执行");
        return true;
    }
    // 返回true才会执行方法,返回false不会执行
    return false;
}

step3:在不需要拦截的controller上加上UnInterception注解

@Controller
@RequestMapping("/interceptor")
public class InterceptorController {
    @UnInterception
    @RequestMapping("/test")
    public String test() {
        return "hello";
    }
}

实例-登录验证

用拦截器实现一个登录验证功能

step1:自定义拦截器

import com.kimmel.course13.annotation.UnInterception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;

public class MyInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        String methodName = method.getName();
        // 判断用户有没有登录,一般登录之后的用户都有一个对应的token
        UnInterception unInterception = method.getAnnotation(UnInterception.class);
        String token = request.getParameter("token");
        if (null == token || "".equals(token)) {
            logger.info("用户未登录,没有权限执行{}请登录", methodName);
            return false;
        }
        // 返回true才会执行方法,返回false不会执行
        return true;
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        String methodName = method.getName();
        logger.info("已经执行完{}了,但是还没有进入视图渲染", methodName);
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("视图也渲染完了,此时我可以做一些清理工作了");
    }
}

step2:配置拦截器

import com.kimmel.course13.Interceptor.MyInterceptor;
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.WebMvcConfigurationSupport;
@Configuration
public class MyInterceptorConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

step3:自定义测试controller

@Controller
@RequestMapping("/interceptor")
public class InterceptorController {
    @RequestMapping("/test")
    public String test() {
        return "hello";
    }
}

step4:测试

进入浏览器,输入http://localhost:8080/interceptor/test
结果:无法进入,日志:用户未登录,没有权限执行 test 请登录
进入浏览器,输入http://localhost:8080/interceptor/test?token=1
结果:成功进入hello.html

到此这篇关于SpringBoot配置拦截器实现过程详解的文章就介绍到这了,更多相关SpringBoot配置拦截器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot配置拦截器实现过程详解

本文链接: https://www.lsjlt.com/news/169895.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作