2017-04-11 45 views
-1

我一直在試用各種教程來讓Spring Security工作。我正在自學一個學校項目。我有一個教程的基本登錄功能,現在正在嘗試實現sec taglib,因此我可以使用authorize標籤根據用戶角色選擇性地向用戶顯示內容。無論我嘗試的教程/官方文檔的建議有什麼組合,我都無法實現它(我確定它來自我對XML配置的乏味理解)。將不勝感激任何幫助。與Spring Security的基礎知識苦苦掙扎 - 需要啓用sec taglib

這裏是我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.angels</groupId> 
<artifactId>ccollier</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.5.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.2.2.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.0.2.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.webjars</groupId> 
     <artifactId>bootstrap</artifactId> 
     <version>3.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.webjars</groupId> 
     <artifactId>jquery</artifactId> 
     <version>1.11.1</version> 
    </dependency> 



    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.0.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.0.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 

</dependencies> 


<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <verbose>true</verbose> 
        <source>1.8</source> 
        <target>1.8</target> 
        <showWarnings>true</showWarnings> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <path>/</path> 
        <contextReloadable>true</contextReloadable> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

我的web.xml:

<!-- webapp/WEB-INF/web.xml --> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
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" 
version="3.0"> 

<display-name>To do List</display-name> 

<welcome-file-list> 
    <welcome-file>login.do</welcome-file> 
</welcome-file-list> 

<servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/todo-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

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

</web-app> 

我的應用程序的命名空間(待辦事項-servlet.xml中):

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    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-4.0.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd"> 

    <context:component-scan base-package="com.angels" /> 
    <bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/views/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 
<mvc:resources mapping="/resources/**" location="/resources/" 
cache-period="31556926"/> 
    <mvc:resources mapping="/webjars/**" location="/webjars/"/> 
    <mvc:annotation-driven /> 
    <http auto-config="true"> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
    </http> 

</beans> 

現在造成什麼問題是應用程序名稱空間中的這一行。我直接從Spring文檔http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html中瞭解到這一點。它表示,這些行需要啓用網絡安全。

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

當我在它懸停在Eclipse中,我得到:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'http'. One of '{"http:// 
www.springframework.org/schema/beans":import, "http://www.springframework.org/schema/beans":alias, "http:// 
www.springframework.org/schema/beans":bean, WC[##other:"http://www.springframework.org/schema/beans"], "http:// 
www.springframework.org/schema/beans":beans}' is expected. 

我再嘗試運行我的應用程序,這導致它不能啓動時得到了類似的錯誤。感謝任何幫助。

回答

0

在XML的默認命名空間是beans

xmlns="http://www.springframework.org/schema/beans"

http是屬於春天的安全性,所以你應該在http元素之前添加的命名空間,你已經添加了命名空間定義你的XML

xmlns:security="http://www.springframework.org/schema/security"

所以,你只需要改變http

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

關於名稱空間的更多信息,請參閱here;