概念:
我們知道,Solr是以webapp的形式運行的,那么我們只需要把Solr.war文件部署到web容器中,便可以運行了,但是因為需要連接數據庫做索引並且提供線上的服務調用query接口,那么Solr的安全性是需要考慮的。因為Solr並沒有自帶Ip訪問限制。那么我們需要自己來實現。
思路是將Solr導入到普通web project中,然后加上相應的類去實現Ip訪問限制的功能。
實現
我們將Solr.war解壓后得到下列目錄結構:
這本來就是一個web project 的目錄結構,那么我們可以將這個目錄導入到eclipse中,
步驟一:
在eclipse/myeclipse中新建普通web project。
步驟二:
將solr-4.9.0.war解壓
步驟三:
將war文件解壓后的目錄中所有文件復制到eclipse項目中的webroot下:
步驟四:
修改web.xml文件中solrhome的路徑。如果是在web容器中設置的話,就不需要執行這一步,具體參見博客:二、Solr安裝(Tomcat)
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>D:/SolrIndex</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
步驟五:
添加jar包,除了Solr自帶的jar包外,根據需要添加相應的jar文件,比如我就添加了Mysql的jdbc驅動和Spring
步驟六:
新建config source folder,用來放置相應的配置文件,不一定要建文件夾,只要保證相應的配置文件在部署后的class文件中即可。我新建文件夾是方便以后修改配置。
步驟七(關鍵):
這一步就是核心的一部,也就是IP限制和一系列功能的實現,在config中配置了允許訪問的IP地址:
allows=127.0.0.1
然后新建一個類AccessFilter繼承了Spring的filter,接收到一個訪問請求后,根據請求的IP和配置文件中允許訪問的IP對比,判斷是否允許訪問。
下面是doFilter方法:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 獲取request和response HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; String remoteAddr = servletRequest.getRemoteAddr(); //判斷是否是允許的IP if(allow(remoteAddr)){ //允許訪問 chain.doFilter(request, response); }else{ //不允許訪問,返回錯誤信息 servletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); servletResponse.getWriter().print("403 Forbidden"); } }
最后附上項目的目錄結構:
總結:
我的思路是將Solr轉化成一個普通的eclipse web project,然后根據需求,往項目中添加相應的類,實現相應的功能,也就是在Solr外面再加了一層,把Solr集成到了web project中。