已經(jīng)不知道什么時(shí)候看到spring-security了羔杨,反正第一次接觸直接放棄了,沒有學(xué)的欲望窿吩,直覺告訴我茎杂,這很TM的難。
近來又覺得無聊所以開始重新看看纫雁,順便就把學(xué)會(huì)的記錄一下煌往,希望能幫助看到的朋友們,當(dāng)然也希望大家可以和我交流轧邪。
一步一步開始正題:
1.最基本的工程(這里推薦一個(gè)鏈接)
2.使用數(shù)據(jù)庫表中的用戶和client
這里將使用密碼模式刽脖,需要請(qǐng)求的參數(shù)是client_id,client_secret,grant_type,username,password,使用上面鏈接的教程確實(shí)可以從數(shù)據(jù)庫獲取悼粮,但是表名和字段名這些不能改變。而我一開始就是想使用我自定義的數(shù)據(jù)庫表結(jié)構(gòu)曾棕,于是開始了對(duì)這個(gè)小功能探索之路扣猫。
首先能就是程序執(zhí)行起來之后的的Endpoints,/oauth/token路徑的方法在TokenEndpoints.class中:
從紅色標(biāo)記地方進(jìn)入TokenGranter.class的一個(gè)實(shí)現(xiàn)類?AbstractTokenGranter.class:
從這里可以看到,這里調(diào)用了一個(gè)clientDetailsService.loadClientByClientId()方法來獲取client表里的數(shù)據(jù),于是我定義了一個(gè)類實(shí)現(xiàn)ClientDetailsService這個(gè)類翘地,運(yùn)行后果然從我自己建的表中取到了數(shù)據(jù)申尤。這個(gè)時(shí)候我就在想,那是不是也有一個(gè)UserDetailsService.class的類來獲取用戶信息呢?于是我直接搜了下這個(gè)名字衙耕,還真有昧穿!并且該接口中有個(gè)loadUserByUsername()的方法,那絕對(duì)沒錯(cuò)了橙喘。
完成自己的實(shí)現(xiàn)后再做如下配置:
啟動(dòng)服務(wù)器时鸵,使用postman訪問/oauth/token:
可以看到已經(jīng)可以獲取到token,并且使用自己的自定義表結(jié)構(gòu)。
第一次寫文章厅瞎,說實(shí)話還是有點(diǎn)緊張饰潜,希望可以幫助到一些需要的人,也希望大家可以多多和我探討和簸,給我意見或者建議彭雾,有什么不對(duì)的還麻煩大家指出來,謝謝K!薯酝!
后續(xù)還會(huì)繼續(xù)寫些相關(guān)的踩坑經(jīng)歷,并更新下踩坑代碼
https://github.com/bltccccz/springboot-demo.git
https://gitee.com/ridersccz/springboot-demo.git