shiro集成springMVC报错One or more Filters failed to start.

约定不等于承诺〃 2021-05-18 20:36 747阅读 0赞

报错信息:

  1. 严重: One or more Filters failed to start. Full details will be found in the appropriate container log file
  2. 一月 31, 2020 5:45:46 下午 org.apache.catalina.core.StandardContext startInternal
  3. 严重: Context [/edaily-web] startup failed due to previous errors
  4. 一月 31, 2020 5:45:46 下午 org.springframework.web.context.support.XmlWebApplicationContext doClose

查看idea自带的tomcat日志文件:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzk2ODYxMw_size_16_color_FFFFFF_t_70

可以看到错误信息:(基本意思是shiroFilter里面没有signout的过滤条件,需要增加)

  1. 严重: Exception starting filter shiroFilter
  2. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: There is no filter with name 'signout' to apply to chain [/api/logout] in the pool of available Filters. Ensure a filter with that name/path has first been registered with the addFilter method(s).
  3. at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:175)
  4. at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103)
  5. at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1512)
  6. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:250)
  7. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
  8. at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:962)
  9. at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:324)
  10. at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
  11. at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199)
  12. at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
  13. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
  14. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
  15. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4841)
  16. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5535)
  17. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  18. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  19. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  20. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
  21. at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1809)
  22. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  23. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  24. at sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
  25. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45009)
  26. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45012)
  27. at java.lang.reflect.Method.invoke(Method.java:498)
  28. at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
  29. at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
  30. at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
  31. at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
  32. at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
  33. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  34. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  35. at sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
  36. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45009)
  37. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45012)
  38. at java.lang.reflect.Method.invoke(Method.java:498)
  39. at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
  40. at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
  41. at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
  42. at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
  43. at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
  44. at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
  45. at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
  46. at java.security.AccessController.doPrivileged(Native Method)
  47. at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)
  48. at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
  49. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  50. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  51. at sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
  52. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45009)
  53. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45012)
  54. at java.lang.reflect.Method.invoke(Method.java:498)
  55. at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
  56. at sun.rmi.transport.Transport$1.run(Transport.java:200)
  57. at sun.rmi.transport.Transport$1.run(Transport.java:197)
  58. at java.security.AccessController.doPrivileged(Native Method)
  59. at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
  60. at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
  61. at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
  62. at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
  63. at java.security.AccessController.doPrivileged(Native Method)
  64. at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
  65. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  66. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  67. at java.lang.Thread.run(Thread.java:748)
  68. Caused by: java.lang.IllegalArgumentException: There is no filter with name 'signout' to apply to chain [/api/logout] in the pool of available Filters. Ensure a filter with that name/path has first been registered with the addFilter method(s).
  69. at org.apache.shiro.web.filter.mgt.DefaultFilterChainManager.addToChain(DefaultFilterChainManager.java:265)
  70. at org.apache.shiro.web.filter.mgt.DefaultFilterChainManager.createChain(DefaultFilterChainManager.java:148)
  71. at org.apache.shiro.spring.web.ShiroFilterFactoryBean.createFilterChainManager(ShiroFilterFactoryBean.java:397)
  72. at org.apache.shiro.spring.web.ShiroFilterFactoryBean.createInstance(ShiroFilterFactoryBean.java:437)
  73. at org.apache.shiro.spring.web.ShiroFilterFactoryBean.getObject(ShiroFilterFactoryBean.java:343)
  74. at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
  75. ... 64 more

原因是我在shiroFilter中的filterChainDefinitions配置了signout的动作,但springMVC中我并没有写signout的过滤拦截,如@RequestMapping(“/signout”),而spring上下文启动的时候会去检查这些filter,所以报这个错。暂时注释掉 就可以了。

  1. <!--shiro 请求拦截器,这里的 bean id 一定要对应 web.xml 中的filter-name,否则找不到这个拦截器-->
  2. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  3. <property name="securityManager" ref="securityManager"></property>
  4. <!-- 没有权限或者失败后跳转的页面 -->
  5. <property name="loginUrl"
  6. value="www.baidu.com" />
  7. <property name="filterChainDefinitions">
  8. <value>
  9. /api/login=anon
  10. /api/register=anon
  11. <!--/api/logout=signout-->
  12. /**=authc
  13. </value>
  14. </property>
  15. </bean>

发表评论

表情:
评论列表 (有 0 条评论,747人围观)

还没有评论,来说两句吧...

相关阅读