安全包括兩個主要操作。
第一個被稱為“認證”,是為用戶建立一個他所聲明的主題。主題一般式指用戶,設備或可以在你系統中執行動作的其他系統。
第二個叫“授權”,指的是一個用戶能否在你的應用中執行某個操作,在到達授權判斷之前,身份的主題已經由身份驗證過程建立。
1. 在web.xml文件中加入Filter聲明
<!-- Spring security Filter --> <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>
獲得當前已認證的用戶的名字(obtain the name of the currently authenticated user)
(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
官方案例如下:
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { String username = ((UserDetails)principal).getUsername(); } else { String username = principal.toString(); }
訪問受保護的資源
使用數據庫對用戶和權限進行管理
一般來說,我們都有使用數據庫對用戶和權限進行管理的需求,而不會把用戶寫死在配置文件裡。所以,我們接下來就重點討論使用數據庫對用戶和權限進行管理的方法。
通過擴展Spring Security的默認實現來進行用戶和權限的管理
事實上,Spring Security提供了2個認證的接口,分別用於模擬用戶和權限,以及讀取用戶和權限的操作方法。這兩個接口分別是:UserDetails和UserDetailsService。
非常清楚,一個接口用於模擬用戶,另外一個用於模擬讀取用戶的過程。所以我們可以通過實現這兩個接口,來完成使用數據庫對用戶和權限進行管理的需求。在這裡,我將給出一個使用Hibernate來定義用戶和權限之間關系的示例。