码奴的真理:要创造自己屎山,是有代价的!
最近新搭建一个项目,不想拷贝原来老代码,参考官网最新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)中,创建切点必须要匹配规则,否则抛异常,并未对匹配规则为空的情况!!实际项目中的,部分原子业务也可借鉴这种方式,不满足业务条件时,抛出异常,而不是自行消化。
这种解决方式可能不适用于你的问题,但这种排查思路可以参考,喜欢点个赞呗,这对我很重要
!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)