记录异常排查:‘patterns‘ must not be empty

记录异常排查:‘patterns‘ must not be empty,第1张

记录异常排查:‘patterns‘ must not be empty

码奴的真理:要创造自己屎山,是有代价的!

最近新搭建一个项目,不想拷贝原来老代码,参考官网最新demo,从头来一遍!已部安装了mybatis-plus、mybatis-plus-generator、validation、druid等组件,调试没有问题。

今天打算把shiro权限加入,用shiro-spring-boot-starter来实现,按照shiro官网(https://shiro.apache.org/spring-boot.html#web-applications)示例部署,启动失败,部分异常如下:

Caused by: java.lang.IllegalArgumentException: 'patterns' must not be empty
	at org.springframework.util.Assert.notEmpty(Assert.java:378) ~[spring-core-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.support.AbstractRegexpMethodPointcut.setPatterns(AbstractRegexpMethodPointcut.java:81) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.support.RegexpMethodPointcutAdvisor.getPointcut(RegexpMethodPointcutAdvisor.java:128) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:289) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:321) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:128) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:97) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:78) ~[spring-aop-5.2.15.RELEASE.jar:5.2.15.RELEASE]

第一反应,我写错了,反复对比官网例子,没写错;
第二反应,官网错了,对比了之前的项目(shiro-spring 1.4.0),配置也就那些,没有问题;
第三反映,度娘,娘居然搜不出这个错误,给出一堆垃圾;
第四反映,谷哥,哥也没搜出来;

心里一万只草泥马,我只是想搭建个环境,又要浪费时间了……
反复猜测各种配置,SecurityManage、Relam、CredentialMather、Filter、FilterChainDefinition各种配置,老项目的代码也复制过来,不行~~~~

自己尝试着分析异常信息:应该是shiro中需要启动Aop,没有pattern,拦截了。网上收了一大堆关于AOP的机制,头发掉了一把也没看懂!此时卡在这已经1天了(不是一整天,是瞅可以偷懒就来调试一把)~~~

不管原理了,直接迎着头皮一步步调试!在看调试信息的时候,看不懂,挨着看每个类的变量,都点进看看,发现了个好东西:

灵光一闪,记得之前在看大神的帖子的时候https://csdnnews.blog.csdn.net/article/details/86662809(太深奥,没看懂),有介绍advice,原来这个问题是因为druid配置!!!!查看了一下druid的配置,其中有一段:

我凸(艹皿艹 )

总结:

        之前的druid配置,只是验证了连接池可用、dashboard正常打开、慢查询等信息,并未验证监控 ---- Aop未开上述配置是不生效的;
        shiro中开启Aop用于拦截过滤,druid中的监控配置生效,引发了该异常!
        spring在代码(spring-boot 2.3.11RELEASE)中,创建切点必须要匹配规则,否则抛异常,并未对匹配规则为空的情况!!实际项目中的,部分原子业务也可借鉴这种方式,不满足业务条件时,抛出异常,而不是自行消化。

 这种解决方式可能不适用于你的问题,但这种排查思路可以参考,喜欢点个赞呗,这对我很重要

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5612171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存