代码之家  ›  专栏  ›  技术社区  ›  Matt W

SpringSecurity需要ContextLoaderListener,但我使用的是带注释的配置,怎么办?

  •  5
  • Matt W  · 技术社区  · 15 年前

    @ImportResource("security-config.xml") 加载安全配置。配置bean创建得很好。我的网站.xml看起来是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="com-timbuk2-webapp-compositor" 
             version="3.0"
             xmlns="http://java.sun.com/xml/ns/javaee" 
             xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                                 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >
    
        <!-- Spring Security Chain -->
        <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>
    
         <!--  Character Encoding -->
        <filter>
            <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!--  URL Rewrite -->
        <filter>
            <filter-name>urlRewriteFilter</filter-name>
            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
            <init-param>
                <param-name>logLevel</param-name>
                <param-value>commons</param-value>
            </init-param>
            <init-param>
                <param-name>confPath</param-name>
                <param-value>/WEB-INF/conf/urlrewrite-config.xml</param-value>
            </init-param>
        </filter>
    
        <filter-mapping>
            <filter-name>urlRewriteFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!-- Listeners -->
        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>
    
        <!-- Context Parameters -->
        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/conf/log4j-config.xml</param-value>
        </context-param>
    
        <!-- Servlets -->
        <servlet>
            <servlet-name>app-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextClass</param-name>
                <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
            </init-param>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>com.website.config</param-value>
            </init-param>
            <load-on-startup>0</load-on-startup>
        </servlet>
    
        <!-- Servlet mappings -->
        <servlet-mapping>
            <servlet-name>app-dispatcher</servlet-name>
            <url-pattern>/app/*</url-pattern>
        </servlet-mapping>
    
    
    </web-app>
    

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

    给我的网站.xml我的应用程序没有初始化。有没有办法在我的注解配置中手动创建ContextLoaderListener?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Betlista    12 年前

    只需使用ContextLoaderListener创建根应用程序上下文。

    <context-param>
        <description>The Spring configuration files.</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/application.xml</param-value>
    </context-param>
    
    <listener>
        <description>The Spring context listener.</description>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

    内部应用程序.xml,还可以定义基于注释的配置。它将由DispatcherServlet定义的WebApplicationContext继承。

    然后将安全配置导入应用程序.xml. 因此,安全性将应用于配置中的所有ApplicationContext。

        2
  •  0
  •   Betlista    12 年前

    我相信它可以与以下网页应用程序下的添加

    <context-param>
      <param-name>contextClass</param-name>
      <param-value>
        org.springframework.config.java.context.JavaConfigWebApplicationContext
      </param-value>
    </context-param>
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>com.website.config</param-value>
    </context-param>
    

    资料来源: http://blog.springsource.com/2008/03/26/spring-java-configuration-whats-new-in-m3/

        3
  •  0
  •   SongChay Beng    5 年前

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/appcontext-root.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>