Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 通用匹配模式(';/**';)在其他模式之前定义_Spring_Spring Mvc_Spring Security - Fatal编程技术网

Spring 通用匹配模式(';/**';)在其他模式之前定义

Spring 通用匹配模式(';/**';)在其他模式之前定义,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我在尝试将Spring安全性引入我的webapp时遇到问题。这是我的web.xml: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <para

我在尝试将Spring安全性引入我的webapp时遇到问题。这是我的
web.xml

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:application-context.xml
        classpath:web-context.xml
        classpath:security-context.xml
    </param-value>
</context-param>

<context-param>
    <param-name>defaultHtmlEscape</param-name>
    <param-value>true</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/admin</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<session-config>
    <session-timeout>30</session-timeout>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

<!-- Spring Security config -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<security:http auto-config='true'>
    <security:intercept-url pattern="/admin.html" />
    <security:http-basic />
</security:http>
<security:http pattern="/services/**" security="none" />
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="admin" password="analyzer4321"
                authorities="ROLE_ADMIN" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

当我尝试运行服务器时,启动时出现以下异常:

java.lang.IllegalArgumentException: A universal match pattern ('/**')
is defined before other patterns in the filter chain, causing them to be ignored.
Please check the ordering in your <security:http> namespace or 
FilterChainProxy bean configuration.
java.lang.IllegalArgumentException:通用匹配模式('/**'))
在过滤器链中的其他模式之前定义,导致忽略它们。
请检查命名空间中的顺序或
FilterChainProxy bean配置。

我不知道我做错了什么。有什么建议吗?

您的
安全上下文.xml
文件中的此部分:

<security:http auto-config='true'>
    <security:intercept-url pattern="/admin.html" />
    <security:http-basic />
</security:http>

在这个(第二个)之前处理(因为它们的顺序):


第一部分说:限制对
/admin.html
的访问,并允许自由访问任何其他页面

第二部分是无用的。它说:允许访问与
/services/**
匹配的所有页面。但第一节已经允许了这一点

您可以删除第二部分,或将其放在第一部分之前

有关使用多个
标记的更多详细信息,请参阅


顺便说一句,
标记通常具有
access
属性。我不确定在没有
访问权限的情况下是否可以使用
。有关详细信息,请参阅。

Spring安全性采用的第一种模式是模式属性中的http标记。如果http标记中未声明任何模式属性,则默认为
截取url标记属性始终位于第二位,即在de http模式标记之后。
如果您有两个或多个http标记,您应该始终使用值声明模式属性,以便不会发生冲突

为什么第一节说:允许自由访问除/admin.html以外的任何其他页面?
<security:http pattern="/services/**" security="none" />