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执行->拦截后->过滤后
相关推荐
《Spring Boot安全实战:深入解析Spring Security》 Spring Security是Spring生态中用于处理应用程序安全性的强大框架,尤其在Spring Boot项目中,它提供了一种快速、灵活且强大的安全解决方案。本资料包...
3. 集成SpringBoot和SpringSecurity,配置过滤器链和安全拦截规则,以保护特定的URL。 4. 创建登录页面并处理认证逻辑,可以使用SpringSecurity提供的默认登录页面,也可以自定义。 5. 测试项目,确保登录、权限控制...
├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...
8. **Middleware**:可能包含自定义的拦截器、过滤器或异常处理器,用于增强应用程序的功能。 9. **Tests**:测试目录,例如 `src/test/java`,包含了对应用的单元测试和集成测试,使用 JUnit 和 Mockito 等工具。 ...
├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...
├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...
├─第4章-Springboot2.x整合ApacheShiro快速上手实战 │ 4-1SpringBoot2.x整合Shiro.mp4 │ 4-2快速上手之Shiro认证和授权流程实操上集.mp4 │ 4-3Shiro认证和授权流程和常用API梳理下集.mp4 │ ├─第5章-...
2.2 配置Shiro:创建一个`ShiroConfig`类,配置Shiro的SecurityManager、Realm以及过滤器链。 Realm是Shiro与数据库交互的桥梁,需要实现自定义的`AuthorizingRealm`,处理用户的认证和授权逻辑。 三、Shiro权限...
- **配置Web安全过滤器**:在`WebSecurityConfig`类中,配置Shiro的Filter,如`FormAuthenticationFilter`和`AuthorizationFilter`。 - **启动Shiro**:在SpringBoot的主类中,使用`@PostConstruct`注解的方法启动...
《全面解剖RocketMQ与项目实战》课程是深入学习分布式消息中间件RocketMQ的重要资源,本部分为"day2-part1",包含了多个关键主题,旨在帮助开发者掌握RocketMQ的核心概念以及如何在实际项目中应用。以下是各视频文件...
- 创建`ShiroConfig.java`配置类,配置SecurityManager、Realm、过滤器链等。例如,可以定义自定义的Realm来处理用户认证和授权逻辑,使用`HashedCredentialsMatcher`来处理密码的哈希匹配。 3. **启动Shiro**: ...
3. **API网关**:Zuul或Spring Cloud Gateway作为微服务系统的入口,实现路由转发和过滤器功能。 **八、Spring Boot 实战项目** 1. **创建RESTful API**:构建一个简单的Web服务,提供CRUD操作。 2. **集成安全框架...
监控集群状态 5-1 HBase备份与恢复 5-2 HBase监控简介 5-3 Hadoop JMX监控实战 5-4 HBase JMX监控实战 第6章 Phoenix & Sqoop 对HBase业务应用过程中常用到的第三方开源工具Phoenix和Sqoop进行介绍和实战操作。...
├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**: 作为...
2. **咨询管理**:发布、查看、评论咨询信息,分类管理咨询,支持搜索和过滤功能。 3. **角色与权限**:定义不同角色的权限,实现细粒度的访问控制。 4. **API接口管理**:通过Swagger定义和测试API接口,确保前后端...
3. **webapp/WEB-INF/web.xml**:Web应用的部署描述符,配置Servlet和过滤器。 4. **webapp/WEB-INF/classes**:编译后的Java类文件存放位置。 5. **webapp/WEB-INF/lib**:存放项目所需的第三方库JAR文件。 6. **...
Elasticsearch的核心概念包括索引、文档、字段、映射、查询、过滤器等。 知识点2:Elasticsearch安装和配置 Elasticsearch的安装和配置是使用Elasticsearch搜索引擎的第一步。该教程涵盖了Elasticsearch的单机安装...
文件中可能包含这些过滤器的详细解释和自定义实现。 3. **角色和权限管理**:Spring Security支持基于角色的访问控制(RBAC),可以定义角色(Role)和权限(Permission)。文件可能包含如何创建自定义角色和权限,...