日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot+Shiro實現一個Http請求的Basic認證

瀏覽:28日期:2023-07-09 18:16:26
目錄前言實踐部分測試部分總結前言

今天跟小伙伴們分享一個實戰內容,使用Spring Boot+Shiro實現一個簡單的Http認證。

場景是這樣的,我們平時的工作中可能會對外提供一些接口,如果這些接口不做一些安全認證,什么人都可以訪問,安全性就太低了,所以我們的目的就是增加一個接口的認證機制,防止別人通過接口攻擊服務器。

至于Shiro是什么,Http的Basic認證是什么,王子就簡單介紹一下,詳細內容請自行了解。

Shiro是一個Java的安全框架,可以簡單實現登錄、鑒權等等的功能。

Basic認證是一種較為簡單的HTTP認證方式,客戶端通過明文(Base64編碼格式)傳輸用戶名和密碼到服務端進行認證,通常需要配合HTTPS來保證信息傳輸的安全。

實踐部分

首先說明一下測試環境。

王子已經有了一套集成好Shiro的Spring Boot框架,這套框架詳細代碼就不做展示了,我們只來看一下測試用例。

要測試的接口代碼如下:

/** * @author liumeng */@RestController@RequestMapping('/test')@CrossOriginpublic class TestAppController extends BaseController { /** * 數據匯總 */ @GetMapping('/list') public AjaxResult test() {return success('測試接口!'); }}

使用Shiro,一定會有Shiro的攔截器配置,這部分代碼如下:

/** * Shiro過濾器配置 */ @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();// Shiro的核心安全接口,這個屬性是必須的shiroFilterFactoryBean.setSecurityManager(securityManager);// 身份認證失敗,則跳轉到登錄頁面的配置shiroFilterFactoryBean.setLoginUrl(loginUrl);// 權限認證失敗,則跳轉到指定頁面shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);// Shiro連接約束配置,即過濾鏈的定義LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();// 對靜態資源設置匿名訪問filterChainDefinitionMap.put('/favicon.ico**', 'anon');filterChainDefinitionMap.put('/lr.png**', 'anon');filterChainDefinitionMap.put('/css/**', 'anon');filterChainDefinitionMap.put('/docs/**', 'anon');filterChainDefinitionMap.put('/fonts/**', 'anon');filterChainDefinitionMap.put('/img/**', 'anon');filterChainDefinitionMap.put('/ajax/**', 'anon');filterChainDefinitionMap.put('/js/**', 'anon');filterChainDefinitionMap.put('/lr/**', 'anon');filterChainDefinitionMap.put('/captcha/captchaImage**', 'anon');// 退出 logout地址,shiro去清除sessionfilterChainDefinitionMap.put('/logout', 'logout');// 不需要攔截的訪問filterChainDefinitionMap.put('/login', 'anon,captchaValidate');filterChainDefinitionMap.put('/ssoLogin', 'anon'); // 開啟Http的Basic認證filterChainDefinitionMap.put('/test/**', 'authcBasic'); // 注冊相關filterChainDefinitionMap.put('/register', 'anon,captchaValidate');Map<String, Filter> filters = new LinkedHashMap<String, Filter>();filters.put('onlineSession', onlineSessionFilter());filters.put('syncOnlineSession', syncOnlineSessionFilter());filters.put('captchaValidate', captchaValidateFilter());filters.put('kickout', kickoutSessionFilter());// 注銷成功,則跳轉到指定頁面filters.put('logout', logoutFilter());shiroFilterFactoryBean.setFilters(filters);// 所有請求需要認證authcBasicfilterChainDefinitionMap.put('/**', 'user,kickout,onlineSession,syncOnlineSession');shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean; }

這里我們要關注的是代碼中的

filterChainDefinitionMap.put('/test/**', 'authcBasic'); 這部分代碼,它指定了我們的測試接口啟動了Http的Basic認證,這就是我們的第一步。

做到這里我們可以嘗試的去用瀏覽器訪問一下接口,會發現如下情況:

Spring Boot+Shiro實現一個Http請求的Basic認證

這就代表Basic認證已經成功開啟了,這個時候我們輸入系統的用戶名和密碼,你以為它就能成功訪問了嗎?

答案是否定的,我們只是開啟了認證,但并沒有實現認證的邏輯。

王子通過閱讀部分Shiro源碼,發現每次發送請求后,都會調用ModularRealmAuthenticator這個類的doAuthenticate方法,源碼如下:

protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) throws AuthenticationException {assertRealmsConfigured();Collection<Realm> realms = getRealms();if (realms.size() == 1) { return doSingleRealmAuthentication(realms.iterator().next(), authenticationToken);} else { return doMultiRealmAuthentication(realms, authenticationToken);} }

可以看出,這個方法主要就是對Realm進行了管理,因為我們的系統本身已經有兩個Ream了,針對的是不同情況的權限驗證,所以為了使用起來不沖突,我們可以繼承這個類來實現我們自己的邏輯,在配置類中增加如下內容即可:

@Bean public ModularRealmAuthenticator modularRealmAuthenticator(){//用自己重新的覆蓋UserModularRealmAuthericator modularRealmAuthericator = new UserModularRealmAuthericator();modularRealmAuthericator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());return modularRealmAuthericator; }

然后在我們自己的UserModularRealmAuthericator類中重寫doAuthenticate方法就可以了,這里面的具體實現邏輯就要看你們自己的使用場景了。

我們可以自己新創建一個Realm來單獨校驗Basic認證的情況,或者共用之前的Realm,這部分就自由發揮了。

大概內容如下:

public class UserModularRealmAuthericator extends ModularRealmAuthenticator { private static final Logger logger = LoggerFactory.getLogger(UserModularRealmAuthericator.class); @Override protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) throws AuthenticationException {assertRealmsConfigured();//強制轉換返回的tokenUsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;//所有RealmCollection<Realm> realms = getRealms();//最終選擇的RealmCollection<Realm> typeRealms = new ArrayList<>();for(Realm realm:realms){ if(...){ //這部分是自己的邏輯判斷,過濾出想要使用的RealmtypeRealms.add(realm); }}//判斷是單Realm 還是多Realmif(typeRealms.size()==1){ return doSingleRealmAuthentication(typeRealms.iterator().next(),usernamePasswordToken);}else{ return doMultiRealmAuthentication(typeRealms,usernamePasswordToken);} }}

Realm的具體實現代碼這里就不做演示了,無非就是判斷用戶名密碼是否能通過校驗的邏輯。如果不清楚,可以自行了解Realm的實現方式。

Realm校驗實現后,Basic認證就已經實現了。

測試部分

接下來我們再次使用瀏覽器對接口進行測試,輸入用戶名和密碼,就會發現接口成功響應了。

我們來抓取一下請求情況

Spring Boot+Shiro實現一個Http請求的Basic認證

可以發現,Request Header中有了Basic認證的信息Authorization: Basic dGVzdDoxMjM0NTY=

這部分內容是這樣的,Basic為一個固定的寫法,dGVzdDoxMjM0NTY=這部分內容是userName:Password組合后的Base64編碼,所以我們只要給第三方提供這個編碼,他們就可以通過編碼訪問我們的接口了。

使用PostMan測試一下

Spring Boot+Shiro實現一個Http請求的Basic認證

可以發現接口是可以成功訪問的。

總結

到這里本篇文章就結束了,王子向大家仔細的介紹了如何使用Shiro實現一個Http請求的Basic認證,是不是很簡單呢。

以上就是Spring Boot+Shiro實現一個Http請求的Basic認證的詳細內容,更多關于Spring Boot+Shiro Http請求的Basic認證的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99久久精品国产亚洲精品| 久久激五月天综合精品| 亚洲aa在线| 深夜福利亚洲| 91精品视频一区二区| 欧美日韩18| 亚洲激情久久| 久久亚洲影院| 国产99久久久国产精品成人免费| 久久国产三级精品| 另类中文字幕国产精品| 亚洲午夜av| 日韩电影在线视频| 精品国产美女a久久9999| 最新国产拍偷乱拍精品| 精品国模一区二区三区| 国产高潮在线| 国产不卡精品| 欧美日韩午夜电影网| 日韩中文字幕一区二区高清99| 亚洲欧美综合| 中国女人久久久| 欧美日韩国产一区精品一区| 国内亚洲精品| 国产视频亚洲| 日本不卡一区二区三区| 欧美福利专区| 日韩视频一区| 日韩欧美三区| 欧美精品99| 国精品产品一区| 国产成人1区| 日韩成人亚洲| 亚洲欧洲一区二区天堂久久| 伊人www22综合色| 欧美日韩a区| 日韩av有码| 91精品久久久久久久久久不卡| 在线看片福利| 国产精品普通话对白| 日韩国产精品久久久| 日韩一区精品| 精品久久中文| 国产手机视频一区二区| 久久最新视频| 成人国产精品久久| 亚洲国产一区二区三区在线播放| 亚洲精品国产精品粉嫩| 国产亚洲字幕| 欧美一级二区| 91精品综合| 国产亚洲久久| 91精品推荐| 国产精品成人一区二区网站软件| 国际精品欧美精品| 久久亚洲一区| 另类欧美日韩国产在线| 欧美成人综合| 精品网站999| 蜜臀av一区二区在线免费观看| 久久不见久久见中文字幕免费| 欧美香蕉视频| 国产精品毛片aⅴ一区二区三区| 色88888久久久久久影院| 亚洲va在线| 麻豆91小视频| 日本一区中文字幕| 国产中文一区| 精品久久国产一区| 日韩和欧美的一区| 亚洲日本欧美| 欧美日韩一区二区三区视频播放| 精品国产午夜肉伦伦影院| 99在线观看免费视频精品观看| 国产在线观看www| 伊人国产精品| 99国产精品99久久久久久粉嫩| 精品日韩在线| 成人高清一区| 国产一区二区三区成人欧美日韩在线观看| 国产一区二区三区四区大秀 | 羞羞答答国产精品www一本| 国产+成+人+亚洲欧洲在线| 日韩成人午夜精品| 亚洲高清二区| 免费视频国产一区| 精品成人免费一区二区在线播放| 日韩一级网站| 偷拍欧美精品| 老司机久久99久久精品播放免费| 免费成人网www| 视频一区二区三区入口| 免费精品视频在线| 亚洲精品乱码久久久久久蜜桃麻豆| 天堂成人国产精品一区| 蜜臀av一区二区三区| 亚洲制服欧美另类| 欧美在线黄色| 色偷偷色偷偷色偷偷在线视频| 三上悠亚国产精品一区二区三区| 日韩av在线播放中文字幕| 国产日韩专区| 电影91久久久| 亚洲精品美女91| 欧美aa一级| 麻豆国产91在线播放| 免费在线看一区| 午夜欧美巨大性欧美巨大| 日韩 欧美一区二区三区| 久久亚洲成人| 亚洲黄色中文字幕| 国产精品嫩草影院在线看| 91九色精品| 精精国产xxxx视频在线播放| 日韩一二三区在线观看| 久久精品影视| 久久女人天堂| 国产精品一区三区在线观看| 亚洲午夜久久| 丝袜美腿亚洲一区| 在线一区免费观看| 黄色亚洲精品| 中文字幕一区二区精品区| 亚洲天堂成人| 亚洲女同一区| 国产在线日韩| 亚洲精品午夜av福利久久蜜桃| 91偷拍一区二区三区精品| 麻豆国产精品一区二区三区| 蜜臀久久久久久久| 亚洲欧美激情诱惑| av成人国产| 综合激情视频| 国产毛片精品| 成人精品视频| 日韩欧美视频专区| 久久五月天小说| 免费成人在线观看| 青草国产精品| 国产精品国产一区| 999视频精品| 男女精品网站| 7777精品| 日本va欧美va欧美va精品| 男人的天堂亚洲一区| 日韩在线观看一区二区| 日本aⅴ亚洲精品中文乱码| 国产精品久久久久久av公交车| 久久99影视| 亚洲二区三区不卡| 日韩激情av在线| 黄色aa久久| 亚洲天堂日韩在线| 九九久久国产| 在线精品福利| 四虎8848精品成人免费网站| 黄色成人91| 麻豆成人综合网| 免费成人网www| 日韩综合一区二区三区| 国产资源在线观看入口av| 99日韩精品| 精品国产亚洲日本| 国产毛片一区| 麻豆91小视频| 综合国产在线| 亚洲激精日韩激精欧美精品| 日韩高清成人在线| 免费看av不卡| 日韩精品乱码av一区二区| 美女网站视频一区| 国产精品多人| 中文字幕视频精品一区二区三区| 高清一区二区| 日韩激情视频网站| 亚洲一级网站| 精品99久久| 国产精品久久乐| 中文字幕中文字幕精品| 久久中文字幕二区| 国内自拍视频一区二区三区| 日韩一区网站| 蜜桃av一区二区三区电影| 久久国产日韩| 日韩精品欧美激情一区二区| 国产精品成人a在线观看| 国产精品成人一区二区网站软件| 日韩精品一区第一页| 一区在线免费观看| 成人自拍av| 天堂中文av在线资源库| 久久久久伊人| 三级精品视频| 久久在线电影| 亚洲精品在线观看91| 婷婷综合社区| 国产一区导航| 亚洲a成人v| 国产精品久av福利在线观看| 国产香蕉精品|