无法阅读架构文档'http://www.springframework.org/schema/security/spring-security-4.0.xsd'

时间:2015-09-13 07:03:30

标签: java xml spring spring-mvc xsd

我想使用像这样配置的Spring安全性

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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-4.0.xsd">

    <http>
        <intercept-url pattern="/add-job**" access="hasRole('USER')" />
        <form-login />
        <logout />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
            <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

但是我的错误是

  

此行找到多个注释:        - schema_reference.4:无法读取架构文档“http://www.springframework.org/schema/        security / spring-security-4.0.xsd',因为1)找不到文件; 2)文件无法阅读; 3)        文档的根元素不是。        - cvc-complex-type.2.4.c:匹配的通配符是strict,但是找不到元素的声明        的 'http'。

我的安全pom.xml是

<!-- Security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>

我无法找到解决此问题的方法。

2 个答案:

答案 0 :(得分:3)

感谢回答家伙,但最后我在Migrating from Spring Security 3.x to 4.x (XML Configuration)找到了解决方案,并找到了以下依赖

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>

这与问题中提到的一面,这种方法解决了我的问题。

答案 1 :(得分:1)

Spring建议使用此http://www.springframework.org/schema/security/spring-security.xsd代替指定版本号,就像使用spring-beans一样。

这样,我有一个具有相同Spring安全依赖关系的项目,而是4.0.2.RELEASE我有4.0.1.RELEASE并且它没有问题。

所以你必须按如下方式尝试模式配置:

xsi:schemaLocation="
   http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
   http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans.xsd"

如果它不起作用,那么您可能会遇到传递依赖问题,而您只是加载两个或更多不同的spring安全版本。在这种情况下,请尝试使用mvn dependency:tree查看configuration工件上是否存在多个弹簧安全依赖性,并排除您不需要的那个。