2011-02-24 82 views
2

我想建立一个应用程序到现在春天3.我现在尝试配置安全性,但似乎我的装配工正在拾起。春天3安全不起作用

下面

是我的web.xml文件

 <?xml version="1.0" encoding="ISO-8859-1"?> 

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd“> 总理家谱

<description>Pedigree Application</description> 
<!-- 
    Key of the system property that should specify the root directory of this 
    web app. Applied by WebAppRootListener or Log4jConfigListener. 
--> 
<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>pedigree.root</param-value> 
</context-param> 

<!-- 
    Location of the Log4J config file, for initialization and refresh checks. 
    Applied by Log4jConfigListener. 
--> 
<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/log4j.properties</param-value> 
</context-param> 

<!-- 
    - Location of the XML file that defines the root application context. 
    - Applied by ContextLoaderServlet. 
    - 
    - Can be set to: 
    - "/WEB-INF/applicationContext-hibernate.xml" for the Hibernate implementation, 
    - "/WEB-INF/applicationContext-jpa.xml" for the JPA one, or 
    - "/WEB-INF/applicationContext-jdbc.xml" for the JDBC one. 
--> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext-hibernate.xml 
       /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 

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

    <!-- 
     To use the JPA variant above, you will need to enable Spring load-time 
     weaving in your server environment. Out of the box, Spring will try to 
     detect the running environment and use the appropriate weaver but if that 
     fails, one must enable one by hand or use the VM-wide weaver. 
     See PetClinic's readme and/or Spring's JPA documentation for more information. 
    --> 


    <!-- ****************************************** --> 


    <!-- 
    - Configures Log4J for this web app. 
    - As this context specifies a context-param "log4jConfigLocation", its file path 
    - is used to load the Log4J configuration, including periodic refresh checks. 
    - 
    - Would fall back to default Log4J initialization (non-refreshing) if no special 
    - context-params are given. 
    - 
    - Exports a "web app root key", i.e. a system property that specifies the root 
    - directory of this web app, for usage in log file paths. 
    - This web app specifies "petclinic.root" (see log4j.properties file). 
--> 
<!-- Leave the listener commented-out if using JBoss --> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

    <!-- 
    - Loads the root application context of this web app at startup, 
    - by default from "/WEB-INF/applicationContext.xml". 
    - Note that you need to fall back to Spring's ContextLoaderServlet for 
    - J2EE servers that do not follow the Servlet 2.4 initialization order. 
    - 
    - Use WebApplicationContextUtils.getWebApplicationContext(servletContext) 
    - to access it anywhere in the web application, outside of the framework. 
    - 
    - The root context is the parent of all servlet-specific contexts. 
    - This means that its beans are automatically available in these child contexts, 
    - both for getBean(name) calls and (external) bean references. 
--> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 


<servlet> 
    <servlet-name>tcdefault</servlet-name> 

<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>/resources/images</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>*.css</url-pattern> 
</servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>*.gif</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>*.png</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>*.js</url-pattern> 
</servlet-mapping>jpg 
<servlet-mapping> 
    <servlet-name>tcdefault</servlet-name> 
    <url-pattern>*.jpg</url-pattern> 
</servlet-mapping> 

    <!-- 
    Defines the 'default' servlet (usually for service static resources). 
    Uncomment this in containers (GlassFish) that do not declare this 
    implicit definition out of the box, or change the name of the servlet mapping 
    below to the appropriate one. 

<servlet> 
    <servlet-name>default</servlet-name> 
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 
    <init-param> 
     <param-name>debug</param-name> 
     <param-value>0</param-value> 
    </init-param> 
    <init-param> 
     <param-name>listings</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
--> 
<!-- 
- Map static resources to the default servlet 
- examples: 
-  http://localhost:8080/static/images/pets.png 
-  http://localhost:8080/static/styles/petclinic.css 
<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/static/*</url-pattern> 
</servlet-mapping> --> 

<!-- 
    - Servlet that dispatches request to registered handlers (Controller implementations). 
    - Has its own application context, by default defined in "{servlet-name}-servlet.xml", 
    - i.e. "petclinic-servlet.xml". 
    - 
    - A web app can contain any number of such servlets. 
    - Note that this web app has a shared root application context, serving as parent 
    - of all DispatcherServlet contexts. 
--> 
<servlet> 
    <servlet-name>pedigree</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

    <!-- 
    - Maps the petclinic dispatcher to "*.do". All handler mappings in 
    - petclinic-servlet.xml will by default be applied to this subpath. 
    - If a mapping isn't a /* subpath, the handler mappings are considered 
    - relative to the web app root. 
    - 
    - NOTE: A single dispatcher can be mapped to multiple paths, like any servlet. 
--> 
<servlet-mapping> 
    <servlet-name>pedigree</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>httpMethodFilter</filter-name> 
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>httpMethodFilter</filter-name> 
    <servlet-name>pedigree</servlet-name> 
</filter-mapping> 

<session-config> 
    <session-timeout>10</session-timeout> 
</session-config> 

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <!-- Displays a stack trace --> 
    <location>/WEB-INF/jsp/uncaughtException.jsp</location> 
</error-page> 

<!-- eliminate welcome files --> 
<!-- useful for Servlet 3 container (Tomcat 7 and Jetty 6) --> 
<welcome-file-list> 
    <welcome-file></welcome-file> 
</welcome-file-list> 

<!-- 
    - Reference to PetClinic database. 
    - Only needed if not using a local DataSource but a JNDI one instead. 
--> 
<!-- 
<resource-ref> 
    <res-ref-name>jdbc/petclinic</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
--> 

这是我appicationContext-security.xml文件

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

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

</beans:beans> 

它们都在应用程序的web-inf文件夹中。该应用程序使用tomcat6进行部署。根据spring安全手册,上述内容在登录之前应该无法访问任何内容。但是我甚至无需登录即可访问所有内容。

有人可以帮忙吗?

每个提示赞赏。

谢谢, 约翰。

回答

0

好吧,这是我愚蠢的错误。

web.xml中我有:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext-hibernate.xml 
       /WEB-INF/applicationContext-security.xml 
    </param-value> 


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

所以这意味着我没有正确关闭的context-param。

现在我的web.xml部分文件看起来像:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext-hibernate.xml 
       /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 

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

thans