Spring Security的簡單介紹

首先我們先對Spring Security進行簡單的介紹:

Spring Security是專門針對基于Spring的項目的安全框架,充分利用了aop和依賴注入來實現安全的功能缩搅。安全框架有兩個重要的概念,即認證和授權揍诽。認證即確認用戶可以訪問當前系統瓣颅;授權即確定用戶在當前系統下所擁有的功能權限弧岳。

Spring Security的配置

1)DelegatingFilterProxy

Spring Security為我們提供了一個或多個過濾器來實現所有安全的功能,我們只需注冊一個特殊的DelegatingFilterProxy過濾器到WebApplicationInitializer即可几晤。

而在實際應用中约炎,我們只需要讓自己的Initializer類繼承AbstractSecurityWebApplicationInitializer抽象類即可。AbstractSecurityWebApplicationInitializer實現了WebApplicationInitializer接口蟹瘾,并通過onStartup方法調用圾浅。

insertSpringSecurityFilterChain(servletContext);

它為我們注冊了DelegatingFilterProxy。insertSpringSecurityFilterChain源碼如下:

配置

Spring Security的配置和Spring MVC的配置類似憾朴,只需在一個配置類上注解@EnableWebSecurity,并讓這個類繼承WebSecurityCOnfigurerAdapter即可狸捕。我們可以通過重寫configure方法來配置相關的安全配置。

代碼如下:


用戶認證

認證需要我們有一套用戶數據的來源,而授權則是對于某個用戶有相應的角色權限众雷。

在Spring Security里我們通過重寫Protected void configure(AuthenticationManagerBuilder auth)方法來實現定制灸拍。

1)內存中的用戶

使用AuthenticationManagerBuilder的inMemoryAuthentication方法即可添加在內存中的用戶,并可給用戶指定角色權限。

2)JDBC中的用戶

JDBC中的用戶直接指定dataSource即可砾省。


不過這看上去很奇怪,其實這里的Spring Security是默認了你的數據庫結構的鸡岗。通過jdbcAuthentication的源碼,我們可以看出JdbcDaoImpl中定義默認的用戶及角色權限獲取的SQL語句:

當然我們可以自定義我們的查詢用戶和權限的SQL語句,例如:

3)通用的用戶

上面的兩種用戶和權限的獲取方式只限于內存或者JDBC编兄,我們的數據訪問方式可以是多種多樣的,可以是非關系型數據庫轩性,也可以是我們常用的JPA等。

這時我們需要自定義實現UserDetailsService接口狠鸳。上面的內存中用戶及JDBC用戶就是UserDetailsService的實現揣苏,定義如下:

說明:SysUser是我們系統的用戶領域對象類悯嗓,User來自于org.springframework.Security.core.userdetails.User。除此之外,我們還需要注冊這個CustomUserService,代碼如下:

請求授權:

Spring Security是通過重寫Protected void configure(HttpSecutity http)方法來實現請求攔截的卸察。

Spring Security使用以下匹配器來匹配請求路徑:

antMatchers:使用Ant風格的路徑匹配

regexMatchers:使用正則表達式匹配路徑

anyRequest:匹配所有請求路徑

在匹配了請求路徑后脯厨,需要針對當前用戶的信息對請求路徑進行安全處理,

Spring Security提供了表9-1所示的安全處理方法。

我們可以看一下下面的示例代碼:

代碼解釋:

1)通過authorizeRequests方法來開始請求權限配置坑质。

2)請求匹配/admin/**,只有擁有Role_ADMIN角色的用戶可以訪問合武。

3)請求匹配到/user/**,擁有ROLE_ADMIN或ROLE_USER角色的用戶都可訪問洪乍。

4)其余所有的請求都需要認證后(登陸后)才可訪問。

定制登錄行為

我們也可以通過重寫

Protected void configure(httpSecurity http)

方法來定制我們的登錄行為夜焦。

下面將重用的登錄行為的定制以簡短的代碼演示:

代碼解釋:

1)通過formLogin方法定制登錄操作壳澳。

2)使用loginPage方法定制登錄頁面的訪問地址。

3)defaultSuccessUrl指定登錄成功后轉向的頁面茫经。

4)failureUrl指定登錄失敗后轉向的頁面巷波。

5)rememberMe開啟cookie存儲用戶信息。

6)tokenValiditySeconds指定cookie有效期為1209600秒卸伞,即2個星期

7)key指定cookie中的私鑰抹镊。

8)使用logout方法定制注銷行為。

9)logoutUrl指定注銷的URL路徑

10)logoutSuccessUrl指定注銷成功后轉向的頁面

參考書籍:JavaEE開發(fā)的顛覆者 Spring Boot實戰(zhàn)

下一篇講解spring boot整合Spring Security

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末荤傲,一起剝皮案震驚了整個濱河市垮耳,隨后出現的幾起案子,更是在濱河造成了極大的恐慌遂黍,老刑警劉巖终佛,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異雾家,居然都是意外死亡铃彰,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門芯咧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牙捉,“玉大人,你說我怎么就攤上這事敬飒⌒安” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵无拗,是天一觀的道長霜浴。 經常有香客問我,道長蓝纲,這世上最難降的妖魔是什么阴孟? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任晌纫,我火速辦了婚禮,結果婚禮上永丝,老公的妹妹穿的比我還像新娘锹漱。我一直安慰自己,他們只是感情好慕嚷,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布哥牍。 她就那樣靜靜地躺著,像睡著了一般喝检。 火紅的嫁衣襯著肌膚如雪嗅辣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天挠说,我揣著相機與錄音澡谭,去河邊找鬼。 笑死损俭,一個胖子當著我的面吹牛蛙奖,可吹牛的內容都是我干的。 我是一名探鬼主播杆兵,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼雁仲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琐脏?” 一聲冷哼從身側響起攒砖,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎日裙,沒想到半個月后祭衩,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡阅签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年掐暮,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片政钟。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡路克,死狀恐怖,靈堂內的尸體忽然破棺而出养交,到底是詐尸還是另有隱情精算,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布碎连,位于F島的核電站灰羽,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜廉嚼,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一玫镐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怠噪,春花似錦恐似、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至憋槐,卻和暖如春双藕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阳仔。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工忧陪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驳概。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓赤嚼,卻偏偏與公主長得像旷赖,于是被迫代替她去往敵國和親顺又。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容