概念:

我们知道,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中。

最新文章

  1. 绿色版的Linux.NET——“Jws.Mono”(续)
  2. 初窥Javascript单元测试,附带掌握一门新技能的学习方式。
  3. jquery版的全选,全不选和反选
  4. 转:Autodesk 2017软件下载+注册机+破解方法(持续更新)
  5. java工程师 学习路线图
  6. AT指令(转)
  7. webpack学习笔记
  8. 运行python代码报错UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe7 in position 91: ordinal not in range(128)的解决办法
  9. 查看Msi文件内容
  10. 一个SQL Server 2008 R2 死锁的问题解决
  11. php析构函数
  12. 【转载】awk简介
  13. Mysql数据库的索引原理
  14. XML中的五个保留字符及实体引用
  15. pip install -r requirements.txt 安装mysqldb失败 解决方案
  16. Python 3从入门到精通01-环境搭建
  17. 04_Python的数据类型1数值和字符串_Python编程之路
  18. mysql新特性
  19. python数据结构与算法第五天【顺序表】
  20. JS算法练习二

热门文章

  1. mockito学习笔记
  2. CriticalFinalizerObject的作用
  3. 使用FileResult返回浏览器文件及乱码问题解决
  4. ImageView设置点击效果没有用?ImageView src的图片大小改变不了?
  5. XFire构建服务端Service的两种方式
  6. Jq/Js收集
  7. QT5-控件-QProgressBar-进度条-用来做下载进度,文件读取进度还不错
  8. 标准SQL语言的用法
  9. ASP.net 中关于Session的存储信息及其它方式存储信息的讨论与总结
  10. Linux下动态链接库和静态链接库