solr后台自带是没有登录功能的,默认访问地址是:http://localhost:8983/solr/#/(内置jetty运行)。
要给sorl后台增加登录验证方法:
1、使用web服务器的登录验证(例如jetty、tomcat)
这种方式好处是不需要另外写代码,只需配置一下对应的web服务器就行了。
2、使用web过滤器过滤地址验证
这种方法是更加灵活,缺点是需要点代码开发。
本文介绍的是第二种方法:
SolrLoginFilter.java
package com.penngo.solr;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
public class SolrLoginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest)request;
HttpServletResponse httpResponse = (HttpServletResponse)response;
HttpSession session = httpRequest.getSession();
String url = httpRequest.getRequestURL().toString();
String userAgent = httpRequest.getHeader("user-agent");
String query = httpRequest.getQueryString();
String servletPath = httpRequest.getServletPath();
String contextPath = httpRequest.getContextPath();
System.out.println("url======="
+ ", url:" + url + ", servletPath:" + servletPath + ", contextPath:" + contextPath + ", query:" + query
+ ", userAgent:" + userAgent);
Object isLogin = session.getAttribute("isLogin");
if(isLogin == null || ((boolean)isLogin) != true) {
String user = StringUtils.isEmpty(request.getParameter("user")) == false ? request.getParameter("user") : "";
String password = StringUtils.isEmpty(request.getParameter("password")) == false ? request.getParameter("password") : "";
if(user.equals("admin") == true && password.equals("123") == true) {
session.setAttribute("isLogin", true);
httpResponse.sendRedirect(contextPath);
return;
}
else {
httpRequest.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(loginPage());
out.close();
return;
}
}
chain.doFilter(request, response);
}
public void destroy() {
}
private String loginPage() {
String page = "\n"
+ "\n"
+ "
\n"+ "
\n"+ "用户名:\n"
+ "密  码:\n"
+ "登录 \n"
+ "
\n"+ "
+ "";
return page;
}
}
在原来的web.xml中增加过滤器配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
metadata-complete="true"
>
SolrLoginFilter
com.penngo.solr.SolrLoginFilter
SolrLoginFilter
/
SolrRequestFilter
org.apache.solr.servlet.SolrDispatchFilter
excludePatterns
/partials/.+,/libs/.+,/css/.+,/js/.+,/img/.+,/templates/.+
SolrRequestFilter
/*
LoadAdminUI
org.apache.solr.servlet.LoadAdminUiServlet
SolrRestApi
org.restlet.ext.servlet.ServerServlet
org.restlet.application
org.apache.solr.rest.SolrSchemaRestApi
LoadAdminUI
/index.html
SolrRestApi
/schema/*
.xsl
application/xslt+xml
index.html
Disable TRACE
/
TRACE
Enable everything but TRACE
/
TRACE
运行结果: