`
落叶留步
  • 浏览: 53244 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

spring-boot开发一堆问题

 
阅读更多

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啊。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    【预习资料】02.Spring Boot 核心组件之Starter1

    Starter 是 Spring Boot 中的一个核心组件,它可以理解成是一个 pom 配置了一堆 jar 组合的空 Maven 项目,用来简化 Maven 依赖配置。starter 可以继承也可以依赖于别的 starter。 Spring Boot 官方提供的 Starter ...

    java反编译泄露源码-swagger-spring-boot:swagger-spring-boot-starter是一款建立在swagge

    请求一堆参数是非常枯燥且烦人的事情,而 swagger 就是让你摆脱这种束缚感.... 项目群 近期询问 swagger-spring-boot-starter 的朋友越来越多,所以就创建了一个意见反馈群(QQ群:868804589),BUG反馈和优化/美化...

    spring-cloud开发

    在学习Spring Cloud开发时,你需要掌握Spring Boot的基础,理解微服务架构的核心理念,并熟悉上述组件的使用方法。通过实际运行提供的代码,你可以深入理解这些组件如何协同工作,如何配置和调整它们以满足特定需求...

    Arthas-boot.zip

    Arthas-boot.zip是一个包含Arthas-boot相关jar包的压缩文件,主要用于Java应用程序的问题排查。Arthas,全称为 Alibaba Arthas,是阿里巴巴开源的一款强大的Java诊断工具,它可以帮助开发者在不重启服务的情况下进行...

    Java-Spring-Boot-Interview-Questions-and-Answers:最受欢迎的Java面试问答

    在Java开发领域,Spring Boot框架已经成为构建现代企业级应用程序的标准选择。随着其广泛的应用,面试官经常会在面试中考察候选者对Spring Boot的理解和实践经验。本资料“Java-Spring-Boot-Interview-Questions-and...

    spring boot admin server

    Spring Boot Admin Server是一款基于Spring Boot的应用管理工具,它允许开发者实时监控和管理Spring Boot应用的状态。这个工具提供了丰富的UI界面,使得我们可以方便地查看应用程序的日志、健康检查、环境信息、HTTP...

    spring-boot-rest-swagger:使用Swagger和ORM端点实现Spring Boot。 已实施所有必需的REST标准以供参考

    Spring Boot(maven构建的一部分,无需安装) Postgres SQL(在云上,无需安装) 建立步骤 生成并测试mvn clean install 运行服务器java -jar target/rest-0.0.1-SNAPSHOT.jar 访问以查看受支持的API。 它具有...

    soap-spring-boot-cxf:用于使用Spring Boot,Apache CXF和JAX-WS生成和测试SOAP-WSDL驱动的服务的示例项目

    最大的变化是将其分为一个WSDL(仅作为SOAP接口)和一堆相互导入的XSD。 那应该代表一个更复杂的领域,尽管它们没有包含太多定义,但我可以更好地展示许多相关技术,这些技术通常出现在现实世界中。 因此,该示例...

    浅谈Spring Boot中如何干掉if else的方法

    特别是在订单系统中,对订单的不同类型作出不同的处理,传统实现方法将导致一堆的if else语句,使代码变得难以阅读和维护。本文将主要介绍如何在Spring Boot中使用策略模式来简化if else代码,提高代码的可读性和...

    Spring Boot 2.x中Actuator的一些知识点

    Spring Boot 2.x的Actuator是一个强大的工具,用于监控和管理Spring Boot应用程序。它提供了丰富的端点(endpoints),能够帮助开发者获取应用的运行时信息,包括但不限于健康检查、环境变量、配置属性、缓存状态、...

    Spring5Boot2ReactorStocks:Spring5 Boot2React堆

    随着微服务架构的流行,Spring Boot 2.x进一步简化了应用开发,而Spring 5引入了Reactor作为响应式编程模型,为处理高并发场景提供了新方案。本篇将深入探讨Spring 5 Boot 2集成Reactor在股票数据处理中的应用,帮助...

    Java面试大厂-redis-mysql-spring-zookeeper

    Spring是Java企业级应用开发中最广泛使用的框架,提供了一个全面的编程和配置模型。面试中,你需要熟悉Spring的基本概念(如依赖注入、AOP)、Spring Boot的启动流程、Spring MVC工作原理、事务管理、Spring Cloud...

    Aop注解+Redis解决SpringBoot接口幂等性(源码自取)

    Spring Boot是基于Spring框架的快速开发工具,它简化了配置并提供了开箱即用的功能。AOP(面向切面编程)则是Spring的一个重要特性,允许我们在不修改原有业务代码的情况下,通过定义切面来实现代码的横向关注点,如...

    monitor-boot-starter

    综上所述,"monitor-boot-starter"是一个专注于监控的Spring Boot组件,旨在简化应用监控的集成和管理,提高开发和运维的效率。通过深入理解和有效利用这个组件,可以提升整个系统的稳定性和可靠性。

    spring 微服务相关框架学习。以及记录 jvm 调优 数据监控 并发控制-spring-frame.zip

    首先,Spring框架是一个全面的Java企业级应用开发平台,它简化了开发过程并提供了丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。Spring Boot进一步简化了Spring应用的启动和运行,使得开发者...

    能成功运行的springboot源文件

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它提供了预配置的依赖项和自动配置功能,使得开发者可以快速地构建可运行的独立应用程序。在描述中提到的“能成功...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.2.docx

    Spring Boot 的自动配置是其核心特性之一,它极大地简化了微服务和 web 应用的配置过程。当我们在项目中引入 Spring Boot 的 starter 包(如 spring-boot-starter-web、spring-boot-starter-data-jpa 等)时,Spring...

    jeecg常见问题

    #### 一、Jeecg数据库脚本问题 在Jeecg平台的不同版本中,数据库脚本的处理方式有所变化。对于3.5.2之前的版本,无需手动执行数据库脚本,系统会在启动时自动完成数据库的初始化。然而,从3.5.2版本开始,为了确保...

    springcloud-服务注入与发现、服务间调用、负载均衡.zip

    SpringCloud是基于Spring Boot实现的一套微服务框架,它提供了在分布式系统中常见的诸多功能,如服务注册与发现、服务间调用、负载均衡等。本文将深入探讨这些核心概念,帮助你理解并掌握SpringCloud在实际开发中的...

    java-hero-bootcamp

    10. **Spring框架**:学习Spring的基本概念,如IoC容器、AOP、事务管理,以及Spring Boot的快速开发特性。 11. **单元测试**:JUnit的使用,编写测试用例,进行代码覆盖率分析。 12. **Maven或Gradle**:构建工具...

Global site tag (gtag.js) - Google Analytics