如果想在网站上颁布一机密文件,仅有少数几人能浏览到,可以采用下面的方式:
新建工程名为:0923 ,我们假定机密文件为secret.html,现将此文件放到WEB-INF文件夹中,在Java web应用程序中此文件夹是受保护的,任何人都不能通过浏览器直接获取下面的文件,即使他知道文件的准确位置及名称。
下面编写一个servlet,提示用户输入用户名及密码。若密码验证通过,则转到secret.html上。
该servlet所处的包名为:com.helloweenvsfei.servlet;
InitParamServlet.java
package com.helloweenvsfei.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitParamServlet extends HttpServlet {
private static final long serialVersionUID = 7298032096933866458L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>请登录查看secret文件</TITLE></HEAD>");
out.println("<style>body, td, div {font-size:12px; }</style>");
out.println(" <BODY>");
out.println("<form action='" + request.getRequestURI() + "' method='post'>");
out.println("帐号:<input type='text' name='username' style='width:200px; '> <br/>");
out.println("密码:<input type='password' name='password' style='width:200px; '> <br/><br/>");
out.println("<input type='submit' value=' 登录 '>");
out.println("</form>");
if(true){
//
out.println("<br/><br/><br/><br/><br/><br/><br/>用户名、密码为:<br/>");
//
Enumeration params = this.getInitParameterNames();
//
while(params.hasMoreElements()){
//
String usernameParam = (String)params.nextElement();
//
String passnameParam = this.getInitParameter(usernameParam);
//
out.println("[" + usernameParam + ", " + passnameParam + "], ");
//
}
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 提交的 username 参数
String username = request.getParameter("username");
// 提交的 password 参数
String password = request.getParameter("password");
// 取所有的初始化参数名称
Enumeration params = this.getInitParameterNames();
while(params.hasMoreElements()){
String usernameParam = (String)params.nextElement();
// 取参数值
String passnameParam = this.getInitParameter(usernameParam);
// 如果 username 匹配且 password 匹配. username 大小写不敏感,password大小写敏感
if(usernameParam.equalsIgnoreCase(username)
&& passnameParam.equals(password)){
// 显示文件。/WEB-INF 下的文件不能通过浏览器访问到,因此是安全的
request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response);
return;
}
}
// username,password 不匹配,显示登录页面
this.doGet(request, response);
}
}
然后在
web.xml中添加两个账户:lin,123;admin,admin,作如下改动:
<servlet>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>
com.helloweenvsfei.servlet.InitParamServlet
</servlet-class>
<init-param>
<param-name>lin</param-name>
<param-value>123</param-value>
</init-param>
<init-param>
<param-name>admin</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
secret.html的内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gbk">
<title>secret</title>
</head>
<h1>小心,这是秘密文件,别让别人看到!</h1>
<body >
</body>
</html>
登录前后的效果如图:


如果要增加或删除浏览该页的人选,只需改动web.xml就可以了,很方便。