java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring拦截器与过滤器区别

Spring 框架中拦截器与过滤器的区别及拦截器使用详解

作者:大智若愚Null

过滤器和拦截器在Spring开发中各有优势,过滤器适用于处理通用的请求处理任务,而拦截器更适合与业务逻辑紧密相关的操作,本文给大家介绍Spring 框架中拦截器与过滤器的区别及拦截器使用详解,感兴趣的朋友一起看看吧

Spring 框架中拦截器与过滤器的区别及拦截器使用详解

在 Spring 框架的开发过程中,拦截器和过滤器都是非常重要的组件,它们都可以对请求进行拦截和处理,但在实现原理、应用场景等方面存在明显差异。本文将深入剖析两者的区别,并通过详细的代码示例介绍 Spring 拦截器的使用步骤。

一、拦截器与过滤器的区别

1.1 所属体系与运行环境

1.2 拦截范围

1.3 执行时机与方法

1.4 功能与灵活性

二、Spring 拦截器使用步骤

2.1 创建拦截器类

//被扫描
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle Interceptor");
//        return可返回两种值  : true  拦截放行   false  拦截不放行
        //判断用户是否登录,获取Session中存的会话
        Object username = request.getSession().getAttribute("username");
        //username == null  说明username未存入会话,用户没有登录
        if (username != null){
            System.out.println("已登录");
            return true;
        }
        //向前端发出响应
        response.getWriter().write("notlogin");
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle Interceptor");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion Interceptor");
    }
}

2.2 配置拦截器

@Configuration
@EnableWebMvc
public class SpringMvc implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
//    拦截器拦截路径和排除路径
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/api");
    }
}

2.3 测试拦截器

@RestController
@RequestMapping("/api")
public class apiController {
    @GetMapping
    public String login() {
        System.out.println("Controller!");
        return "登录成功";
    }

三、总结

过滤器和拦截器在 Spring 开发中各有优势,过滤器适用于处理通用的请求处理任务,而拦截器更适合与业务逻辑紧密相关的操作。掌握它们的区别和使用方法,能帮助我们更高效地开发健壮、可维护的 Web 应用。

到此这篇关于Spring 框架中拦截器与过滤器的区别及拦截器使用详解的文章就介绍到这了,更多相关Spring拦截器与过滤器区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文