1 spring-boot + shiro 自定义过滤器 不按filterChain的规则执行
版本:spring-boot 1.5.15.RELEASE + shiro 1.4.0
当自定义filter以后,把自定义的filter配置到shiro的filterChain以后,发生了超出预期的效果,本来shiro中filterChain的的原则是从上往下匹配,当有一个规则匹配以后,就不会继续匹配filterChain剩下的规则,也就是filterChain的机制是短路的,只要找到一个filter过滤规则满足就返回。
当与springboot集成以后,自定义的filter使用@Bean的方式生成,当在filterChain最后面配置一条规则,使用的是自定义过滤器,形式:/* = customeAuthc,这时候奇怪的事情发生了,所有满足/*的请求都会被拦截。
然后就开始找原因:一开始是找是不是自定义filter使用的方式不对,确定是正确以后;接着就开始找是不是shiro的filterChain的匹配规则问题,甚至一度怀疑shiro会执行filterChain的所有满足条件的过滤器,又仔细翻了shiro关于filterChain的执行规则以后,确定只执行第一个匹配的规则以后。然后就网上开始找,最后终于找到一篇讲这个,就找个这一篇也是醉了,根据文章的描述,找到原因了,是因为自定义的filter默认springboot也会把它注册到全局filter中去,就相当于我们之前servlet开发的时候,在web.xml中定义的filter会拦截所有匹配的url。但是我们没有给filter配置拦截的规则,这时候是按照shiro的filterChain里面的定义的规则来拦截。
解决办法:不要springboot把这个filter当成拦截器去自动注册,就把它当成一个普通的bean就行了。
@Bean public FilterRegistrationBean registration(AuthorizationFilter authorizationFilter) { FilterRegistrationBean registration = new FilterRegistrationBean(authorizationFilter); // 不要让springboot接管该filter registration.setEnabled(false); return registration; }
2 spring-boot + mybatis typeAliasesPackages失效 导致mapper.xml中resultType直接写类名报错
异常信息: java.lang.ClassNotFoundException
版本:spring-boot 1.5.15.RELEASE + mybatis 3.4.6 + mybatis-spring 1.3.2
项目开发完成以后,通常需要打包,默认maven打出来的包是没有依赖jar,不可以执行。这时候使用spring-boot-maven-plugin这个插件以后,就可以把spring-boot项目打包成一个可执行的jar,这个jar相当于我们常说的fat jar,包含了所有的依赖jar。
一般在mybatis开发的时候,在mapper.xml中,写select的时候,需要用resultType或者resultMap来指定返回类型,resultType指定的时候,一般我们会省略包名,直接写类名,然后在mybatis的全局配置中设置
typeAliasesPackages对应包名。
当这两种结合以后,就出现了意想不到的结果,resultTpe中写类名,在spring-boot打出来fat jar以后,通过命令行执行,直接抛出异常java.lang.ClassNotFoundException。关键在于,当我们在ide中项目可以完美的运行,一打出fat jar以后运行就报错。
当然解决方案很简单,但是这种方式不是我们期望的方式,因为这种解决办法然我们很无语。把typeAliasesPackages去掉,resultType里面写全限定类名(带包名一起),就可以解决。
这种解决方式真是彻底的倒行逆施,本来为了方便开发,搞出一个typeAliasesPackages来,现在又要写全名了,明显是bug啊。
相关推荐
Starter 是 Spring Boot 中的一个核心组件,它可以理解成是一个 pom 配置了一堆 jar 组合的空 Maven 项目,用来简化 Maven 依赖配置。starter 可以继承也可以依赖于别的 starter。 Spring Boot 官方提供的 Starter ...
请求一堆参数是非常枯燥且烦人的事情,而 swagger 就是让你摆脱这种束缚感.... 项目群 近期询问 swagger-spring-boot-starter 的朋友越来越多,所以就创建了一个意见反馈群(QQ群:868804589),BUG反馈和优化/美化...
在学习Spring Cloud开发时,你需要掌握Spring Boot的基础,理解微服务架构的核心理念,并熟悉上述组件的使用方法。通过实际运行提供的代码,你可以深入理解这些组件如何协同工作,如何配置和调整它们以满足特定需求...
Arthas-boot.zip是一个包含Arthas-boot相关jar包的压缩文件,主要用于Java应用程序的问题排查。Arthas,全称为 Alibaba Arthas,是阿里巴巴开源的一款强大的Java诊断工具,它可以帮助开发者在不重启服务的情况下进行...
在Java开发领域,Spring Boot框架已经成为构建现代企业级应用程序的标准选择。随着其广泛的应用,面试官经常会在面试中考察候选者对Spring Boot的理解和实践经验。本资料“Java-Spring-Boot-Interview-Questions-and...
Spring Boot Admin Server是一款基于Spring Boot的应用管理工具,它允许开发者实时监控和管理Spring Boot应用的状态。这个工具提供了丰富的UI界面,使得我们可以方便地查看应用程序的日志、健康检查、环境信息、HTTP...
Spring Boot(maven构建的一部分,无需安装) Postgres SQL(在云上,无需安装) 建立步骤 生成并测试mvn clean install 运行服务器java -jar target/rest-0.0.1-SNAPSHOT.jar 访问以查看受支持的API。 它具有...
最大的变化是将其分为一个WSDL(仅作为SOAP接口)和一堆相互导入的XSD。 那应该代表一个更复杂的领域,尽管它们没有包含太多定义,但我可以更好地展示许多相关技术,这些技术通常出现在现实世界中。 因此,该示例...
特别是在订单系统中,对订单的不同类型作出不同的处理,传统实现方法将导致一堆的if else语句,使代码变得难以阅读和维护。本文将主要介绍如何在Spring Boot中使用策略模式来简化if else代码,提高代码的可读性和...
Spring Boot 2.x的Actuator是一个强大的工具,用于监控和管理Spring Boot应用程序。它提供了丰富的端点(endpoints),能够帮助开发者获取应用的运行时信息,包括但不限于健康检查、环境变量、配置属性、缓存状态、...
随着微服务架构的流行,Spring Boot 2.x进一步简化了应用开发,而Spring 5引入了Reactor作为响应式编程模型,为处理高并发场景提供了新方案。本篇将深入探讨Spring 5 Boot 2集成Reactor在股票数据处理中的应用,帮助...
Spring是Java企业级应用开发中最广泛使用的框架,提供了一个全面的编程和配置模型。面试中,你需要熟悉Spring的基本概念(如依赖注入、AOP)、Spring Boot的启动流程、Spring MVC工作原理、事务管理、Spring Cloud...
Spring Boot是基于Spring框架的快速开发工具,它简化了配置并提供了开箱即用的功能。AOP(面向切面编程)则是Spring的一个重要特性,允许我们在不修改原有业务代码的情况下,通过定义切面来实现代码的横向关注点,如...
综上所述,"monitor-boot-starter"是一个专注于监控的Spring Boot组件,旨在简化应用监控的集成和管理,提高开发和运维的效率。通过深入理解和有效利用这个组件,可以提升整个系统的稳定性和可靠性。
首先,Spring框架是一个全面的Java企业级应用开发平台,它简化了开发过程并提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。Spring Boot进一步简化了Spring应用的启动和运行,使得开发者...
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它提供了预配置的依赖项和自动配置功能,使得开发者可以快速地构建可运行的独立应用程序。在描述中提到的“能成功...
Spring Boot 的自动配置是其核心特性之一,它极大地简化了微服务和 web 应用的配置过程。当我们在项目中引入 Spring Boot 的 starter 包(如 spring-boot-starter-web、spring-boot-starter-data-jpa 等)时,Spring...
#### 一、Jeecg数据库脚本问题 在Jeecg平台的不同版本中,数据库脚本的处理方式有所变化。对于3.5.2之前的版本,无需手动执行数据库脚本,系统会在启动时自动完成数据库的初始化。然而,从3.5.2版本开始,为了确保...
SpringCloud是基于Spring Boot实现的一套微服务框架,它提供了在分布式系统中常见的诸多功能,如服务注册与发现、服务间调用、负载均衡等。本文将深入探讨这些核心概念,帮助你理解并掌握SpringCloud在实际开发中的...
10. **Spring框架**:学习Spring的基本概念,如IoC容器、AOP、事务管理,以及Spring Boot的快速开发特性。 11. **单元测试**:JUnit的使用,编写测试用例,进行代码覆盖率分析。 12. **Maven或Gradle**:构建工具...