经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringBoot 过滤器与拦截器实例演示
来源:jb51  时间:2021/11/23 16:30:30  对本文有异议

???SpringBoot中的过滤器拦截器操作与springmvc中的几乎一样所以这里也不过多介绍了,下面举两个简单的栗子演示一下

1、过滤器 ? ? ? ?

1 创建过滤器类LoginFilter,实现servlet包下的Filter接口(包不要导错),加入注解WebFilter

  1. package com.example.filter;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebFilter;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. @WebFilter(urlPatterns = "/filter/*")
  8. public class LoginFilter implements Filter {
  9. @Override
  10. public void init(FilterConfig filterConfig) throws ServletException {
  11. System.out.println("初始化拦截器");
  12. }
  13. @Override
  14. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  15. System.out.println("LoginFilter");
  16. HttpServletRequest request = (HttpServletRequest)servletRequest;
  17. HttpServletResponse response = (HttpServletResponse)servletResponse;
  18. //放行
  19. filterChain.doFilter(request,response);
  20. }
  21. @Override
  22. public void destroy() {
  23. System.out.println("拦截器销毁");
  24. }
  25. }

?????2 创建测试类LoginCotroller

  1. package com.example.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. @RequestMapping("/filter")
  6. public class FilterController {
  7. @RequestMapping("/login")
  8. public String login(){
  9. System.out.println("登录");
  10. return "login";
  11. }
  12. }

? ? ? 3 在启动类上加注解

  1. package com.example;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.web.servlet.ServletComponentScan;
  5. @SpringBootApplication
  6. @ServletComponentScan
  7. //Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册
  8. public class DemoApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(DemoApplication.class, args);
  11. }
  12. }

? 4 启动测试,启动的时候可以看到Filter调用init方法初始化

?接着访问可以看到页面输出

?控制台打印出拦截器中的语句

2、拦截器 ? ? ? ?

1 创建自定义拦截器

  1. package com.example.interceptor;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. public class MyInterceptor implements HandlerInterceptor {
  7. //进入controller方法之前调用的
  8. @Override
  9. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  10. System.out.println("preHandle");
  11. return true;//true表示放行 false表示不放行
  12. }
  13. //调用完controller之后,视图渲染层之前
  14. @Override
  15. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  16. System.out.println("postHandle");
  17. }
  18. //页面跳转之后,整个流程执行之后,一般用于资源的清理
  19. @Override
  20. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  21. System.out.println("afterCompletion");
  22. }
  23. }

? ? ? 2 创建拦截器配置类,注意要加上配置类的注解

  1. package com.example.config;
  2. import com.example.interceptor.MyInterceptor;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  6. @Configuration
  7. public class MyInterceptorConfig implements WebMvcConfigurer {
  8. @Override
  9. public void addInterceptors(InterceptorRegistry registry) {
  10. //设置拦截器并指定拦截路径
  11. registry.addInterceptor(new MyInterceptor()).addPathPatterns("/interceptor/*");
  12. //registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");//拦截所有
  13. //registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/test");//指定不拦截
  14. //添加自定义拦截器
  15. WebMvcConfigurer.super.addInterceptors(registry);
  16. }
  17. }

? ? ? ? 3 创建LoginController测试类

  1. package com.example.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. @RequestMapping("/interceptor")
  6. public class InterceptorController {
  7. @RequestMapping("login")
  8. public String login(){
  9. System.out.println("Interceptor-Login");
  10. return "login";
  11. }
  12. }

? ? ? 4 运行访问,查看效果

控制台输出如下

到此这篇关于SpringBoot 过滤器与拦截器的文章就介绍到这了,更多相关SpringBoot 过滤器与拦截器内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号