servlet的妙用-权限控制

来源:互联网 发布:linux重启mysql命令 编辑:程序博客网 时间:2024/05/16 14:54
        如果想在网站上颁布一机密文件,仅有少数几人能浏览到,可以采用下面的方式:
        新建工程名为: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>

在浏览器中输入:http://localhost:8080/0923/servlet/InitParamServlet
登录前后的效果如图:

servlet的妙用-权限控制 - 林芬亮 - 断鸿零雁的博客servlet的妙用-权限控制 - 林芬亮 - 断鸿零雁的博客


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