0

我正在尝试在我的应用程序上实施安全性:

我有一个使用 web.xml 的应用程序,如下所示:

<web-app>
<display-name>myapp</display-name>

<servlet>
    <servlet-name>tmodel</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>tmodel</servlet-name>
    <url-pattern>/tm/*</url-pattern>
</servlet-mapping>
</web-app>

这是我的 *-servlet.xml :

<context:annotation-config />
<context:component-scan base-package="net.nls"/>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <!-- Configures Spring MVC DataBinder instances -->
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator" />
        </bean>
    </property>
</bean>

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

<!-- Creates the JSR-303 Validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />


<bean id="beansConfiguration" class="net.nls.tm.config.BeansConfiguration"/>

<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
      destroy-method="stop">
    <property name="connectionFactory">
        <bean id="cf" class="org.apache.activemq.ActiveMQConnectionFactory"
              p:brokerURL="tcp://localhost:61616"
              p:useAsyncSend="true"
                />
    </property>
</bean>

<!-- Spring JMS Template -->
<bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <ref local="jmsFactory"/>
    </property>
</bean>

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="50"/>
<task:scheduler id="myScheduler" pool-size="10"/>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

当我查看 Spring Security 文档 3.2 版时,其中一条说明是添加:

<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>

然后将此添加到我的 *-servlet.xml

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
            <user name="bob" password="bobspassword" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>

当我编译并运行应用程序时,出现以下异常:

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:251)

当我搜索网络时,我看到有人添加了

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

然后一切都停止了工作。

怎么了?考虑到我是如何解决这个问题的?

我可以在 *-servlet.xml 中移动我的过滤器吗?如果是的话怎么办?

4

1 回答 1

0

看起来您将侦听器添加到 *-servlet.xml 添加

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

到 web.xml

于 2013-02-07T05:05:52.863 回答