【发布时间】:2014-05-08 02:15:04
【问题描述】:
当我的应用处理 AccessDeniedException 时,我添加了 access-denied-handler 标记以重定向到特定页面,但出现错误:
配置问题:无法从相对导入 bean 定义 位置 [pgm-security-cas.xml] 违规资源:类路径 资源 [spring/pgm-servlet.xml];嵌套异常是 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 来自类路径资源的 XML 文档中的第 92 行 [spring/pgm-security-cas.xml] 无效;嵌套异常是 org.xml.sax.SAXParseException:cvc-complex-type.2.4.a:无效的内容 发现以元素“sec:access-denied-handler”开头。之一 '{"http://www.springframework.org/schema/security":intercept-url}' 是 预计。
这是我的 xml:
<bean id="fsi"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="httpRequestAccessDecisionManager" />
<property name="securityMetadataSource">
<sec:filter-invocation-definition-source use-expressions="true">
<sec:intercept-url pattern="/manageboxes" access="hasRole('A_READ_USER')" />
<sec:access-denied-handler error-page="/accessDeniedPage" />
</sec:filter-invocation-definition-source>
</property>
</bean>
有人知道问题出在哪里吗?
filterChainProxy的定义是:
<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
<sec:filter-chain-map request-matcher="ant">
<sec:filter-chain pattern="/xhtml/login/invalidLogin.xhtml*" filters="none" />
<sec:filter-chain pattern="/j_spring_security_logout"
filters="logoutFilter,fsi" />
<sec:filter-chain pattern="/javax.faces.resource/*"
filters="none" />
<sec:filter-chain pattern="/**"
filters="casAuthenticationFilter, casValidationFilter, wrappingFilter, sif, j2eePreAuthFilter, logoutFilter, fsi" />
</sec:filter-chain-map>
</bean>
【问题讨论】:
-
<access-denied-handler>只允许作为<http>的直接子代。正如错误消息所述,它不是<filter-invocation-definition-source>的有效子代(只有<intercept-url>有效)。 -
请显示您的
filterChainProxy的定义。 -
我已经编辑了我的问题
标签: spring spring-security access-denied