Spring_security使用默认的拦截器出现问题!求高手解答

chaohua20 2010-12-22 12:16:51
Method: org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3768)
Message: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SecurityFilter' defined in file [D:\Program Files\Java\Tomcat5.5\webapps\OnionBBS\WEB-INF\classes\applicationContext-security.xml]: Cannot create inner bean 'org.springframework.security.access.vote.AffirmativeBased#747fa2' of type [org.springframework.security.access.vote.AffirmativeBased] while setting bean property 'accessDecisionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.access.vote.AffirmativeBased#747fa2' defined in file [D:\Program Files\Java\Tomcat5.5\webapps\OnionBBS\WEB-INF\classes\applicationContext-security.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: A list of AccessDecisionVoters is required
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:120)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.access.vote.AffirmativeBased#747fa2' defined in file [D:\Program Files\Java\Tomcat5.5\webapps\OnionBBS\WEB-INF\classes\applicationContext-security.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: A list of AccessDecisionVoters is required
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
... 39 more
Caused by: java.lang.IllegalArgumentException: A list of AccessDecisionVoters is required
at org.springframework.util.Assert.notEmpty(Assert.java:268)
at org.springframework.security.access.vote.AbstractAccessDecisionManager.afterPropertiesSet(AbstractAccessDecisionManager.java:56)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 42 more




Spring_security配置文件
		<!--
一个自定义的filter,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,
我们的所有控制将在这三个类中实现,解释详见具体配置
-->
<beans:bean id="SecurityFilter"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="accessDecisionManager">
<beans:bean class="org.springframework.security.access.vote.AffirmativeBased">

</beans:bean>
</beans:property>
<beans:property name="securityMetadataSource">
<beans:list>
<beans:bean class="org.springframework.security.access.vote.RoleVoter"></beans:bean>
</beans:list>
</beans:property>
</beans:bean>


<http auto-config="true" access-denied-page="/">
<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/index.jsp" access="ROLE_USER" />
<custom-filter ref="SecurityFilter" before="FILTER_SECURITY_INTERCEPTOR" />
<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp" default-target-url="/" />
</http>


<!-- 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 -->
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">

<!-- <password-encoder hash="md5" />-->
</authentication-provider>
</authentication-manager>


<!--用户查询的实现,查询出用户以及用户所拥有的权限-->
<beans:bean id="userDao" class="com.onionbbs.security.dao.SecurityUserDaoImp">

</beans:bean>

<beans:bean id="userService" class="com.onionbbs.security.service.securityUserServiceImp">
<beans:property name="userDao" ref="userDao"></beans:property>
</beans:bean>

<!--所有资源的查询,同时匹配资源-->
<beans:bean id="resourceDao" class="com.onionbbs.security.dao.SecurityUserDaoImp">

</beans:bean>
<beans:bean id="resourceService" class="com.onionbbs.security.service.SecurityResourceServiceImp" init-method="init">
<beans:property name="resourcedao" ref="resourceDao"></beans:property>
</beans:bean>

...全文
253 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Think Nothing 2010-12-22
  • 打赏
  • 举报
回复
唉,怎么都不看报错,明摆告诉你
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'RoleVoter' of bean class [org.springframework.security.access.vote.AffirmativeBased]: Bean property 'RoleVoter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

也就是说你设置的属性 <beans:property name="RoleVoter">不对,应该是
<beans:property name="decisionVoters">
<beans:list>
<beans:bean
class="org.springframework.security.vote.RoleVoter">
<beans:property name="rolePrefix" value="PRIVILEGE" />
</beans:bean>
</beans:list>
</beans:property>
chaohua20 2010-12-22
  • 打赏
  • 举报
回复
真的是伤脑筋啊!谁能帮我解决下
chaohua20 2010-12-22
  • 打赏
  • 举报
回复
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.access.vote.AffirmativeBased#da2cef' defined in file [D:\Program Files\Java\Tomcat5.5\webapps\OnionBBS\WEB-INF\classes\applicationContext-security.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'RoleVoter' of bean class [org.springframework.security.access.vote.AffirmativeBased]: Bean property 'RoleVoter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
... 39 more
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'RoleVoter' of bean class [org.springframework.security.access.vote.AffirmativeBased]: Bean property 'RoleVoter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1038)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:914)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
... 43 more



<beans:bean id="SecurityFilter"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="accessDecisionManager">
<beans:bean
class="org.springframework.security.access.vote.AffirmativeBased">

<beans:property name="RoleVoter">
<beans:list>
<beans:bean class="org.springframework.security.access.vote.RoleVoter">
<beans:property name="rolePrefix" value="PRIVILEGE" />
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>
</beans:property>
<beans:property name="securityMetadataSource" ref="resourceService"></beans:property>
</beans:bean>



修改了但是还是有错误


Think Nothing 2010-12-22
  • 打赏
  • 举报
回复
从错误中可以看出,你的决策管理器出错了
Caused by: java.lang.IllegalArgumentException: A list of AccessDecisionVoters is required
配置应该如下:
<beans:property name="accessDecisionManager">
<beans:bean class="org.springframework.security.access.vote.AffirmativeBased">

<beans:property name="decisionVoters">
<beans:list>
<beans:bean class="org.springframework.security.vote.RoleVoter">
<beans:property name="rolePrefix" value="PRIVILEGE" />
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>

</beans:property>
chaohua20 2010-12-22
  • 打赏
  • 举报
回复
问题终于解决了谢谢你了,是这个的问题

81,087

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧