完整解决Solr鉴权问题

solr的后台默认是没有权限控制的,如果在公网云主机上部署,则完全裸奔在众目睽睽之下,如果被人知道ip,那么可以轻而易举的搞破坏。因此在solr正式部署到线上之前必须要解决访问权限的问题。

解决该问题,第一个想到的就是solr这么成熟的系统,是不是管理后台本身就具备权限配置功能?查阅了solr官方文档,浏览了solr管理后台每一个角落,都木有找到。本文基于solr6.1.0版本,截止该版本,solr管理后台是没有权限配置功能的,不知道后面版本会不会有。

那么只有另寻它法了。百度、google了一番找到了一篇文章,请参考:http://www.jianshu.com/p/07e212cffd91,这里不重复讲解,按照里面说的配置就行了,其实主要原理就是基于jetty的权限配置。输入solr后台地址后,弹出需要登录的窗口,如下图:

完整解决Solr鉴权问题_第1张图片

如果点击取消,将返回401错误。

完整解决Solr鉴权问题_第2张图片


至此解决了solr后台管理增加权限的问题。不过,如果你以为这就全面解决了那就错了,给后台管理系统增加权限后,对于通过solrj API访问的请求,solr也增加了权限的校验,因此原有代码中的solr查询、添加索引、删除索引等操作全部都报错,提示没有权限。Google了半天也没好的解决方案。

没有现成方案的最后救命稻草就是源码了。看源码也需要找个切入点,其实这里很好找,既然是权限问题,那就从solr的访问API入手顺藤摸瓜。以添加索引add访问为例,代码如下:

完整解决Solr鉴权问题_第3张图片

红框部分是构造一个请求对象,配置一定的参数,之后发起对solr服务器的请求。在往下看,就需要看请求对象中是不是有可以配置权限的地方,看到UpdateRequest的基类SolrRequest中有一个设置用户名密码的方法,如下图红框:

完整解决Solr鉴权问题_第4张图片

顿时觉得这里可能有戏,继续仔细看了SolrClient的源码,找到解决方案,就是继承SolrClient类,重写其中所有访问solr服务器的调用,对其中的请求对象增加用户名和密码的校验,代码片段如下:

1. 继承HttpSolrClient

完整解决Solr鉴权问题_第5张图片

2. 实现具体的solr服务器操作

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

完整解决Solr鉴权问题_第6张图片

3. 创建SolrClient对象

如下面红框,创建重写的类实例,进行搜索

完整解决Solr鉴权问题_第7张图片

至此,solr权限问题完整解决!

总结一下主要就2步:

1. 配置solr管理后台jetty服务器,增加权限

2. 重写访问solr的方法逻辑,增加权限的校验

你可能感兴趣的:(完整解决Solr鉴权问题)