2011-02-24 86 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