配置 shiroFilter securityManager 遇到的問(wèn)題
看了老師的課在配置文件里啟動(dòng)遇到的錯(cuò)誤,不知道怎么解決了,求大家指點(diǎn)一下
o.s.w.c.s.XmlWebApplicationContext [AbstractApplicationContext.java:549]? - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource [spring/spring-shiro.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' defined in class path resource [spring/spring-shiro.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in class path resource [spring/spring-shiro.xml]: Cannot resolve reference to bean 'shiroCacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroCacheManager': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.zduod.admin.cache.UserCache<?, ?>]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
2018-09-26 10:23:19.479 [RMI TCP Connection(7)-127.0.0.1] WARN? o.s.b.f.s.DisposableBeanAdapter [DisposableBeanAdapter.java:374]? - Invocation of destroy method 'close' failed on bean with name 'sqlSessionTemplate': java.lang.UnsupportedOperationException: Manual close is not allowed over a Spring managed SqlSession
2018-09-26 10:23:19.487 [RMI TCP Connection(7)-127.0.0.1] ERROR o.s.web.context.ContextLoader [ContextLoader.java:351]? - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource [spring/spring-shiro.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor#0' defined in class path resource [spring/spring-shiro.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in class path resource [spring/spring-shiro.xml]: Cannot resolve reference to bean 'shiroCacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroCacheManager': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.zduod.admin.cache.UserCache<?, ?>]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
?? ?at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:478)
?? ?at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
?? ?at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
?? ?at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
?? ?at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
?? ?at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:240)
?? ?at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:697)
?? ?at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:526)
?? ?at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
?? ?at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
?? ?at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
?? ?at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4753)
?? ?at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215)
?? ?at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
?? ?at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
?? ?at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
?? ?at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
?? ?at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1736)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
?? ?at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
?? ?at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
?? ?at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
?? ?at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
?? ?at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
?? ?at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
?? ?at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
?? ?at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
?? ?at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
?? ?at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
?? ?at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361)
?? ?at sun.rmi.transport.Transport$1.run(Transport.java:200)
?? ?at sun.rmi.transport.Transport$1.run(Transport.java:197)
?? ?at java.security.AccessController.doPrivileged(Native Method)
?? ?at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
?? ?at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
?? ?at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
?? ?at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
?? ?at java.security.AccessController.doPrivileged(Native Method)
?? ?at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
?? ?at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
?? ?at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
?? ?at java.lang.Thread.run(Thread.java:748)
下面是我的配置文件
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xmlns:util="http://www.springframework.org/schema/util" ???????xmlns:context="http://www.springframework.org/schema/context"?xmlns:p="http://www.springframework.org/schema/p" ???????xmlns:tx="http://www.springframework.org/schema/tx"?xmlns:mvc="http://www.springframework.org/schema/mvc" ???????xmlns:aop="http://www.springframework.org/schema/aop" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans ???http://www.springframework.org/schema/beans/spring-beans-4.3.xsd?http://www.springframework.org/schema/tx ???http://www.springframework.org/schema/tx/spring-tx-4.3.xsd?http://www.springframework.org/schema/context ???http://www.springframework.org/schema/context/spring-context-4.3.xsd?http://www.springframework.org/schema/mvc ???http://www.springframework.org/schema/mvc/spring-mvc.xsd?http://www.springframework.org/schema/aop ???http://www.springframework.org/schema/aop/spring-aop-4.3.xsd?http://www.springframework.org/schema/util ???http://www.springframework.org/schema/util/spring-util.xsd ???http://www.springframework.org/schema/cache?http://www.springframework.org/schema/cache/spring-cache-4.0.xsd" ???????default-lazy-init="true"> ????<!--?開(kāi)啟aop,對(duì)類代理?--> ????<aop:config?proxy-target-class="true"></aop:config> ????<!--?Shiro?的Web過(guò)濾器,?web.xml中shiro的filter對(duì)應(yīng)的bean?--> ????<!--?配置shiro的過(guò)濾器工廠類,id-?shiroFilter要和我們?cè)趙eb.xml中配置的過(guò)濾器一致?--> ????<bean?id="shiroFilter"?class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> ????????<property?name="securityManager"?ref="securityManager"?/> ????????<!--?loginUrl認(rèn)證提交地址,如果沒(méi)有認(rèn)證將會(huì)請(qǐng)求此地址進(jìn)行認(rèn)證,請(qǐng)求此地址將由formAuthenticationFilter進(jìn)行表單認(rèn)證?--> ????????<property?name="loginUrl"?value="/"?/> ????????<!--?認(rèn)證成功統(tǒng)一跳轉(zhuǎn)到/admin/home路徑,建議不配置,shiro認(rèn)證成功自動(dòng)到上一個(gè)請(qǐng)求路徑?--> ????????<!--?配置我們?cè)诘卿涰?yè)登錄成功后的跳轉(zhuǎn)地址,如果你訪問(wèn)的是非/login地址,則跳到您訪問(wèn)的地址?--> ????????<property?name="successUrl"?value="/admin/home"?/> ????????<!--?通過(guò)unauthorizedUrl指定沒(méi)有權(quán)限操作時(shí)跳轉(zhuǎn)頁(yè)面?--> ????????<property?name="unauthorizedUrl"?value="/unauthorized"?/> ????????<!--?自定義filter配置?--> ????????<property?name="filters"> ????????????<util:map> ????????????????<entry?key="logout"?value-ref="logoutFilter"?/> ????????????????<!--?將自定義?的FormAuthenticationFilter注入shiroFilter中?--> ????????????????<!--<entry?key="authc"?value-ref="formAuthenticationFilter"?/>--> ????????????</util:map> ????????</property> ????????<!--?過(guò)慮器鏈定義,從上向下順序執(zhí)行,一般將/**放在最下邊?--> ????????<property?name="filterChainDefinitions"> ????????????<value> ????????????????<!--?anon表示此地址不需要任何權(quán)限即可訪問(wèn)?--> ????????????????/admin/login?=?anon ????????????????/admin/login/doLogin?=?anon ????????????????<!--?對(duì)靜態(tài)資源設(shè)置匿名訪問(wèn)?--> ????????????????/static/**?=?anon ????????????????/resources/**?=?anon ????????????????/dist/**?=?anon ????????????????/common/**?=?anon ????????????????/icon/**=anon ????????????????/js/**=anon ????????????????<!--/user/**?=?authc--> ????????????????<!--/role/edit/*?=?perms[role:edit]--> ????????????????<!--/role/save?=?perms[role:edit]--> ????????????????<!--/role/list?=?perms[role:view]--> ????????????????<!--所有的請(qǐng)求(除去配置的靜態(tài)資源請(qǐng)求或請(qǐng)求地址為anon的請(qǐng)求)都要通過(guò)登錄驗(yàn)證,如果未登錄則跳到/login?--> ????????????????/**?=?authc ????????????????/logout=logout ????????????</value> ????????</property> ????</bean> ????<bean?id="logoutFilter"?class="org.apache.shiro.web.filter.authc.LogoutFilter"> ????????<property?name="redirectUrl"?value="/admin/login"?/> ????</bean> ????<!--?開(kāi)啟shiro注解支持?--> ????<bean?class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> ????????<property?name="securityManager"?ref="securityManager"?/> ????</bean> ????<!--?securityManager安全管理器?--> ????<bean?id="securityManager"?class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> ????????<property?name="realm"?ref="userRealm"?/> ????????<!--?注入緩存管理器?--> ????????<property?name="cacheManager"?ref="shiroCacheManager"?/> ????????<!--?注入session管理器?--> ????????<property?name="sessionManager"?ref="sessionManager"?/> ????????<!--?記住我?--> ????????<property?name="rememberMeManager"?ref="rememberMeManager"?/> ????</bean> ????<!--?配置?Bean?后置處理器:?會(huì)自動(dòng)的調(diào)用和?Spring?整合后各個(gè)組件的生命周期方法.?--> ????<bean?id="lifecycleBeanPostProcessor"??class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> ????<!--?配置憑證匹配器?--> ????<bean?id="hashedCredentialsMatcher"?class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> ????????<property?name="hashAlgorithmName"?value="MD5"?/> ????????<property?name="hashIterations"?value="1024"?/> ????</bean> ????<!--自定義SessionDao--> ????<bean?id="redisSessionDao"?class="com.zduod.admin.session.RedisSessionDao"/> ????<bean?id="sessionManager"?class="com.zduod.admin.session.UserSessionManager"> ????????<property?name="sessionDAO"?ref="redisSessionDao"/> ????</bean> ????<!--自定義緩存管理器cache--> ????<bean?id="shiroCacheManager"?class="com.zduod.admin.cache.UserCacheManager"/> ????<!--記住我--> ????<bean?id="rememberMeManager"?class="org.apache.shiro.web.mgt.CookieRememberMeManager"> ????????<property?name="cookie"?ref="rememberMeCookie"/> ????</bean> ????<bean?id="simpleCookie"?class="org.apache.shiro.web.servlet.SimpleCookie"> ????????<property?name="name"?value="rememberMe"/> ????????<property?name="maxAge"?value="20000"/> ????</bean> ? </beans>
2018-10-08
你的這個(gè)類,bean注入頭問(wèn)題,把代碼粘出來(lái)看看