`

springboot-第六章 深入SpringBoot2.x过滤器和配置实战

 
阅读更多

Ordered 的最高优先级是int的最小值,最低优先级是int的最大值。

package org.springframework.core;

public interface Ordered {
    int HIGHEST_PRECEDENCE = -2147483648;
    int LOWEST_PRECEDENCE = 2147483647;

    int getOrder();
}

 

利用Servlet3.0里的注解里面建立一个filter。再在启动类中增加@ServletComponentScan

 

@WebFilter(urlPatterns = "/a/*",filterName = "loginFilter")
public class LoginFilter implements Filter {
    @Override
public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init loginfilter");
    }

    @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter loginfilter");
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

       String userName= request.getParameter("username");
       if(userName.equals("x"))
       {
           //放行
filterChain.doFilter(request,response);
       }
       else
{
           response.sendRedirect("/error.html");
            return;
       }
    }

    @Override
public void destroy() {
        System.out.println("destroy loginfilter");
    }
}

 

用Servlet3.0自定义Servlet

@WebServlet(name = "userServlet",urlPatterns = "/test/user")
public class UserServlet extends HttpServlet {
    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("1",1);
        resp.getWriter().print("userServlet");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

 

 

定义拦截器

public class MyIntercepter implements HandlerInterceptor{
    @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyIntercepter preHandle");
        String accessToken = request.getParameter("access_token");
        System.out.println("MyIntercepter preHandle "+accessToken);
        return HandlerInterceptor.super.preHandle(request,response,handler);
    }

    @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("MyIntercepter postHandle");
        HandlerInterceptor.super.postHandle(request,response,handler,modelAndView);
    }

    @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("MyIntercepter afterCompletion");
        HandlerInterceptor.super.afterCompletion(request,response,handler,ex);
    }
}

 

注册拦截器

@Configuration
public class CustomerWebMvcConfigurer implements WebMvcConfigurer{
    @Override
public void addInterceptors(InterceptorRegistry registry) {
        MyIntercepter intercepter = new MyIntercepter();
        MyIntercepterTwo intercepter2 = new MyIntercepterTwo();
        ///e/*/** 是拦截所有
registry.addInterceptor(intercepter).addPathPatterns("/e/*").excludePathPatterns("/e/c");//不拦截/e/c
registry.addInterceptor(intercepter2).addPathPatterns("/e/*");
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

输出:

MyIntercepter preHandle

MyIntercepter preHandle 1

MyIntercepterTwo preHandle

MyIntercepterTwo preHandle 1

MyIntercepterTwo postHandle

MyIntercepter postHandle

MyIntercepter afterCompletion

MyIntercepter afterCompletion

MyListener requestDestroyed

 

filter和interceptor的区别

 

 

Filter是基于函数回调 doFilter(),而Interceptor则是基于AOP思想

Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等

依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。

在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。

Filter和Interceptor的执行顺序

     

过滤前->拦截前->action执行->拦截后->过滤后

 

 

 

 

 

 

分享到:
评论

相关推荐

    springboot-06-security.zip

    《Spring Boot安全实战:深入解析Spring Security》 Spring Security是Spring生态中用于处理应用程序安全性的强大框架,尤其在Spring Boot项目中,它提供了一种快速、灵活且强大的安全解决方案。本资料包...

    springboot-test.zip

    3. 集成SpringBoot和SpringSecurity,配置过滤器链和安全拦截规则,以保护特定的URL。 4. 创建登录页面并处理认证逻辑,可以使用SpringSecurity提供的默认登录页面,也可以自定义。 5. 测试项目,确保登录、权限控制...

    互联网架构权限认证ApacheShiro零基础到高级实战 视频教程 下载因为太大存百度云盘2.zip

    ├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...

    springboot_project-master_honor7gn_springboot简单实战后端代码_discoverqu

    8. **Middleware**:可能包含自定义的拦截器、过滤器或异常处理器,用于增强应用程序的功能。 9. **Tests**:测试目录,例如 `src/test/java`,包含了对应用的单元测试和集成测试,使用 JUnit 和 Mockito 等工具。 ...

    互联网架构权限认证ApacheShiro零基础到高级实战 视频教程 下载因为太大存百度云盘4.zip

    ├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...

    互联网架构权限认证ApacheShiro零基础到高级实战 视频教程 下载因为太大存百度云盘1.zip

    ├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...

    互联网架构权限认证ApacheShiro零基础到高级实战 视频教程 下载因为太大存百度云盘3.zip

    ├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...

    SpringBoot整合Shiro完整源码(含sql脚本).rar

    2.2 配置Shiro:创建一个`ShiroConfig`类,配置Shiro的SecurityManager、Realm以及过滤器链。 Realm是Shiro与数据库交互的桥梁,需要实现自定义的`AuthorizingRealm`,处理用户的认证和授权逻辑。 三、Shiro权限...

    项目演示:springboot整合shiro.zip

    - **配置Web安全过滤器**:在`WebSecurityConfig`类中,配置Shiro的Filter,如`FormAuthenticationFilter`和`AuthorizationFilter`。 - **启动Shiro**:在SpringBoot的主类中,使用`@PostConstruct`注解的方法启动...

    全面解剖RocketMQ和项目实战-day2-part1.7z

    《全面解剖RocketMQ与项目实战》课程是深入学习分布式消息中间件RocketMQ的重要资源,本部分为"day2-part1",包含了多个关键主题,旨在帮助开发者掌握RocketMQ的核心概念以及如何在实际项目中应用。以下是各视频文件...

    【SpringBoot】廿三、SpringBoot中整合Shiro实现权限管理.pdf

    - 创建`ShiroConfig.java`配置类,配置SecurityManager、Realm、过滤器链等。例如,可以定义自定义的Realm来处理用户认证和授权逻辑,使用`HashedCredentialsMatcher`来处理密码的哈希匹配。 3. **启动Shiro**: ...

    Spring Boot入门与实战_springboot_spring_

    3. **API网关**:Zuul或Spring Cloud Gateway作为微服务系统的入口,实现路由转发和过滤器功能。 **八、Spring Boot 实战项目** 1. **创建RESTful API**:构建一个简单的Web服务,提供CRUD操作。 2. **集成安全框架...

    Hbase+Spring boot实战分布式文件存储

    监控集群状态 5-1 HBase备份与恢复 5-2 HBase监控简介 5-3 Hadoop JMX监控实战 5-4 HBase JMX监控实战 第6章 Phoenix & Sqoop 对HBase业务应用过程中常用到的第三方开源工具Phoenix和Sqoop进行介绍和实战操作。...

    spring boot+spring cloud视频教学下载全套

    ├41 6.11-2禁用Zuul的过滤器.avi ├42 7.1 Spring Cloud Config简介.avi ├43 7.2 编写Config Server.avi ├44 7.3 编写Config Client.avi ├45 7.4 Git仓库配置详解.avi ├46 7.5配置属性加解密之对称加密.avi ├...

    第二代微服务电商项目实战笔记

    【第二代微服务电商项目实战笔记】主要涵盖了构建一个基于SpringBoot2.x和SpringCloud2.x的微服务架构电商项目的全过程。以下将详细介绍项目中的关键技术和实现方式。 **技术选型** 1. **SpringBoot2.x**: 作为...

    毕设项目:基于springboot+ssm+swagger前后端分离的咨询管理系统.zip

    2. **咨询管理**:发布、查看、评论咨询信息,分类管理咨询,支持搜索和过滤功能。 3. **角色与权限**:定义不同角色的权限,实现细粒度的访问控制。 4. **API接口管理**:通过Swagger定义和测试API接口,确保前后端...

    基于mybatis+servlet的crm管理系统.zip

    3. **webapp/WEB-INF/web.xml**:Web应用的部署描述符,配置Servlet和过滤器。 4. **webapp/WEB-INF/classes**:编译后的Java类文件存放位置。 5. **webapp/WEB-INF/lib**:存放项目所需的第三方库JAR文件。 6. **...

    ElasticSearch搜索引擎教程实战篇

    Elasticsearch的核心概念包括索引、文档、字段、映射、查询、过滤器等。 知识点2:Elasticsearch安装和配置 Elasticsearch的安装和配置是使用Elasticsearch搜索引擎的第一步。该教程涵盖了Elasticsearch的单机安装...

    SpringSecurity相关技术资料及范例

    文件中可能包含这些过滤器的详细解释和自定义实现。 3. **角色和权限管理**:Spring Security支持基于角色的访问控制(RBAC),可以定义角色(Role)和权限(Permission)。文件可能包含如何创建自定义角色和权限,...

Global site tag (gtag.js) - Google Analytics