使用 spring 4 获取“无法找到 XML 模式命名空间 [http://www.springframework.org/schema/security] 的 Spring NamespaceHa

Posted

技术标签:

【中文标题】使用 spring 4 获取“无法找到 XML 模式命名空间 [http://www.springframework.org/schema/security] 的 Spring NamespaceHandler”【英文标题】:getting 'Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]' with spring 4 【发布时间】:2017-09-15 16:57:05 【问题描述】:

我正在将 OSGi 项目的 spring 版本升级到 spring 4.2.x。

我已删除 Spring DM 依赖项并添加 Gemini Blueprint 依赖项 (org.eclipse.gemini.blueprint.core,org.eclipse.gemini.blueprint.extender,org.eclipse.gemini.blueprint.io),这些依赖项在 Virgo RT 服务器中处于 ACTIVE 状态。 我添加了spring-security-config 依赖,它也处于活动状态。

但我面临以下问题

org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:找不到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/security] 违规资源:URL [bundleentry://157.fwk1212103909/META-INF/spring/ applicationContext-security.xml]

我的applicationContext-security.xml文件是这样的

<?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:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security.xsd">

  <security:global-method-security pre-post-annotations="enabled" run-as-manager-ref="runAsManager"
secured-annotations="enabled">
    <security:expression-handler ref="expressionHandler" />
  </security:global-method-security> 

  ... 

</beans>

我已将xsd 与版本一起使用。结果相同。 知道是什么导致了这个问题吗?

【问题讨论】:

【参考方案1】:

我必须在项目的 META-INF/spring.handlers 文件中添加以下行。

http\://www.springframework.org/schema/security=org.springframework.security.config.SecurityNamespaceHandler

【讨论】:

【参考方案2】:

如果您说明您使用的是哪个 Virgo 版本,将会有所帮助。你知道 Virgo 3.7.0 包含 Spring 4 吗?

【讨论】:

是的,我使用的是 virgo 3.7.0,我知道 virgo 提供 spring 4。但是缺少 spring-security 包。我已经添加了它们。

以上是关于使用 spring 4 获取“无法找到 XML 模式命名空间 [http://www.springframework.org/schema/security] 的 Spring NamespaceHa的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spring-security-rest:1.4.0.RC5 在 grails 中获取 facebook 用户的联系人列表

尝试使用 gradle bootrun 编译并获取找不到 spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT

Spring Security入门(3-4)Spring Security 异常处理异常传递和异常获取

[死磕 Spring 4/43] --- IOC 之 获取验证模型

如何在@ExceptionHandler(Spring REST)中获取@RequestBody

spring mvc 怎么获取json