Spring Security,這是一種基於 Spring AOP 和 Servlet 過濾器的安全框架。它提供全面的安全性解決方案,同時在 Web 請求級和方法調用級處理身份確認和受權。如下是百科裏對於Spring Security的介紹。java
Spring Security是一個可以爲基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組能夠在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,爲應用系統提供聲明式的安全訪問控制功能,減小了爲企業系統安全控制編寫大量重複代碼的工做。web
經過介紹也能夠看出,spring security並不像apache shiro那樣支持javase和ejb環境。spring
目前最新版本的Spring Security爲4.2.2,可是我這裏用了穩定版本3.1.3。下面例子爲一個簡單的Spring Security配置應用。apache
新建好項目以後在webapp下添加了兩個jsp文件,adminPage.jsp和index.jsp。其中adminPage.jsp只有那些擁有ROLE_ADMIN,ROLE_USER其中一種權限的用戶才能訪問,而index.jsp只容許那些擁有ROLE_USER權限的用戶才能訪問。編程
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>SpringSecurity</display-name> <!-- 加載配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/config/applicationContext*.xml</param-value> </context-param> <!-- spring security 的過濾器配置 --> <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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
在WEB-INF/config/下新建applicationContext.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/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> <http auto-config='true'> <intercept-url pattern="/adminPage.jsp" access="ROLE_ADMIN" /> <intercept-url pattern="/**" access="ROLE_USER" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="admin" password="123" authorities="ROLE_USER, ROLE_ADMIN" /> <user name="user" password="123" authorities="ROLE_USER" /> </user-service> </authentication-provider> </authentication-manager> </beans:beans>
說明:tomcat
<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.zmc</groupId> <artifactId>SpringSecurityDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>SpringSecurityDemo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java-version>1.7</java-version> <org.springframework-version>3.2.2.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.1</org.slf4j-version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <!-- Spring security --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <version>3.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>3.1.3.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
這樣一個項目就構建完成了,部署到tomcat進行測試。安全
在瀏覽器上輸入:http://localhost:8888/SpringSecurityDemo/,由於沒有登錄,因此沒法訪問index.jsp頁面,這個時候spring security就起做用了,對資源進行攔截,由於沒有符合權限的用戶登錄,因此就跳轉到登錄頁面,其中這個登錄頁面是Spring Security自動生成的,這也是auto-config=」true」起的做用之一。mvc
而後輸入用戶名和密碼,成功跳轉到index.jsp頁面。app
這裏由於admin用戶有ROLE_ADMIN和ROLE_USER權限,而index.jsp頁面ROLE_USER權限便可訪問,因此admin用戶能夠成功訪問index.jsp和adminPage.jsp頁面。
下面再來測試用戶user,注意已經登錄了的話,應該重啓瀏覽器,要否則會一直記住用戶,沒法作測試。
從上圖中能夠看到,登錄用戶user,能夠訪問index.jsp頁面可是沒法訪問adminPage.jsp。這是由於user用戶只有ROLE_USER權限,而adminPage.jsp頁面須要ROLE_USER權限,因此就拒絕訪問。以上就是一個簡單的spring security配置應用。