完整解決Solr鑒權(quán)問題

solr的后臺(tái)默認(rèn)是沒有權(quán)限控制的,如果在公網(wǎng)云主機(jī)上部署,則完全裸奔在眾目睽睽之下,如果被人知道ip,那么可以輕而易舉的搞破壞。因此在solr正式部署到線上之前必須要解決訪問權(quán)限的問題。

解決該問題,第一個(gè)想到的就是solr這么成熟的系統(tǒng),是不是管理后臺(tái)本身就具備權(quán)限配置功能?查閱了solr官方文檔,瀏覽了solr管理后臺(tái)每一個(gè)角落,都木有找到。本文基于solr6.1.0版本,截止該版本,solr管理后臺(tái)是沒有權(quán)限配置功能的,不知道后面版本會(huì)不會(huì)有。

那么只有另尋它法了。百度、google了一番找到了一篇文章,請參考:http://www.itdecent.cn/p/07e212cffd91,這里不重復(fù)講解,按照里面說的配置就行了,其實(shí)主要原理就是基于jetty的權(quán)限配置。輸入solr后臺(tái)地址后,彈出需要登錄的窗口,如下圖:

如果點(diǎn)擊取消,將返回401錯(cuò)誤。


至此解決了solr后臺(tái)管理增加權(quán)限的問題。不過,如果你以為這就全面解決了那就錯(cuò)了,給后臺(tái)管理系統(tǒng)增加權(quán)限后,對于通過solrj API訪問的請求,solr也增加了權(quán)限的校驗(yàn),因此原有代碼中的solr查詢、添加索引、刪除索引等操作全部都報(bào)錯(cuò),提示沒有權(quán)限。Google了半天也沒好的解決方案。

沒有現(xiàn)成方案的最后救命稻草就是源碼了??丛创a也需要找個(gè)切入點(diǎn),其實(shí)這里很好找,既然是權(quán)限問題,那就從solr的訪問API入手順藤摸瓜。以添加索引add訪問為例,代碼如下:

紅框部分是構(gòu)造一個(gè)請求對象,配置一定的參數(shù),之后發(fā)起對solr服務(wù)器的請求。在往下看,就需要看請求對象中是不是有可以配置權(quán)限的地方,看到UpdateRequest的基類SolrRequest中有一個(gè)設(shè)置用戶名密碼的方法,如下圖紅框:

頓時(shí)覺得這里可能有戲,繼續(xù)仔細(xì)看了SolrClient的源碼,找到解決方案,就是繼承SolrClient類,重寫其中所有訪問solr服務(wù)器的調(diào)用,對其中的請求對象增加用戶名和密碼的校驗(yàn),代碼片段如下:

1. 繼承HttpSolrClient

2. 實(shí)現(xiàn)具體的solr服務(wù)器操作

下面代碼只比SolrClient中的add方法多了紅框那一行。

3. 創(chuàng)建SolrClient對象

如下面紅框,創(chuàng)建重寫的類實(shí)例,進(jìn)行搜索

至此,solr權(quán)限問題完整解決!

總結(jié)一下主要就2步:

1. 配置solr管理后臺(tái)jetty服務(wù)器,增加權(quán)限

2. 重寫訪問solr的方法邏輯,增加權(quán)限的校驗(yàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容