import java.io.*; import java.util.Date; import java.util.Hashtable; import javax.servlet.*; import javax.servlet.http.*; /** * Display text files in the client browsers given their pathInfo */ public class ViewSrc extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ServletOutputStream out = res.getOutputStream(); res.setContentType("text/html"); String theFile = req.getPathInfo(); ServletContext sc = getServletContext(); String realPath = sc.getRealPath(theFile); if (theFile == null) { throw new ServletException("Missing or Invalid file name: " + theFile); } if (!isAllowedToSee(theFile)) { throw new ServletException("Not authorized access."); } FileInputStream in = new FileInputStream(realPath); if (in == null) { throw new ServletException("Unable to find file: " + theFile); } InputStreamReader reader = new InputStreamReader(in); try { out.println("
"); out.println("");
for (int ch = in.read(); ch != -1; ch = in.read()) {
if (ch == '<') {
out.print("<");
} else if (ch == '&') {
out.print("&");
} else {
out.print((char) ch);
}
}
out.println("");
out.println("");
} catch (IOException ex) {
throw new IOException("IOException: " + ex.toString());
}
}
public String getServletInfo() {
return "Displays in html format the file given on the request";
}
/**
* Specify all files that are allowed to see
* so as to restrict the power of this class
*/
private boolean isAllowedToSee(String file) {
String[] allowedFiles = {
"/WEB-INF/classes/ServletToJsp.java",
"/WEB-INF/classes/cal/Entries.java",
"/WEB-INF/classes/cal/Entry.java",
"/WEB-INF/classes/cal/JspCalendar.java",
"/WEB-INF/classes/cal/TableBean.java",
"/WEB-INF/classes/error/Smart.java",
"/WEB-INF/classes/examples/ExampleTagBase.java",
"/WEB-INF/classes/examples/FooTag.java",
"/WEB-INF/classes/examples/FooTagExtraInfo.java",
"/WEB-INF/classes/examples/LogTag.java",
"/WEB-INF/classes/jsp2/examples/BookBean.java",
"/WEB-INF/classes/jsp2/examples/FooBean.java",
"/WEB-INF/classes/jsp2/examples/el/Functions.java",
"/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.java",
"/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.java",
"/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.java",
"/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.java",
"/WEB-INF/classes/jsp2/examples/simpletag/ShuffleSimpleTag.java",
"/WEB-INF/classes/jsp2/examples/simpletag/TileSimpleTag.java",
"/WEB-INF/classes/num/NumberGuessBean.java",
"/WEB-INF/tags/displayProducts.tag",
"/WEB-INF/tags/helloWorld.tag",
"/WEB-INF/tags/panel.tag",
"/WEB-INF/tags/xhtmlbasic.tag",
"/examples/jsp/cal/cal1.jsp",
"/examples/jsp/cal/cal2.jsp",
"/examples/jsp/checkbox/checkresult.jsp",
"/examples/jsp/colors/colrs.jsp",
"/examples/jsp/dates/date.jsp",
"/examples/jsp/demoUtil.jsp",
"/examples/jsp/error/err.jsp",
"/examples/jsp/error/error.html",
"/examples/jsp/error/errorpge.jsp",
"/examples/jsp/forward/forward.jsp",
"/examples/jsp/forward/one.jsp",
"/examples/jsp/forward/two.html",
"/examples/jsp/include/foo.jsp",
"/examples/jsp/include/include.jsp",
"/examples/jsp/jsp2/el/basic-arithmetic.jsp",
"/examples/jsp/jsp2/el/basic-comparisons.jsp",
"/examples/jsp/jsp2/el/functions.jsp",
"/examples/jsp/jsp2/el/implicit-objects.jsp",
"/examples/jsp/jsp2/jspattribute/jspattribute.jsp",
"/examples/jsp/jsp2/jspattribute/shuffle.jsp",
"/examples/jsp/jsp2/jspx/basic.jspx",
"/examples/jsp/jsp2/jspx/textRotate.jspx",
"/examples/jsp/jsp2/misc/coda.jspf",
"/examples/jsp/jsp2/misc/config.jsp",
"/examples/jsp/jsp2/misc/dynamicattrs.jsp",
"/examples/jsp/jsp2/misc/prelude.jspf",
"/examples/jsp/jsp2/simpletag/book.jsp",
"/examples/jsp/jsp2/simpletag/hello.jsp",
"/examples/jsp/jsp2/simpletag/repeat.jsp",
"/examples/jsp/jsp2/tagfiles/hello.jsp",
"/examples/jsp/jsp2/tagfiles/panel.jsp",
"/examples/jsp/jsp2/tagfiles/products.jsp",
"/examples/jsp/jsptoserv/hello.jsp",
"/examples/jsp/jsptoserv/jsptoservlet.jsp",
"/examples/jsp/num/numguess.jsp",
"/examples/jsp/plugin/plugin.jsp",
"/examples/jsp/sessions/carts.jsp",
"/examples/jsp/simpletag/foo.jsp",
"/examples/jsp/snp/snoop.jsp",
"/examples/jsp/taglib/loop/LoopTag.java",
"/examples/jsp/taglib/loop/looptag.jsp",
"/examples/jsp/xml/xml.jsp",
};
boolean isAllowed = false;
for (int i = 0; i < allowedFiles.length; i++) {
if (file.equals(allowedFiles[i])) {
isAllowed = true;
break;
}
}
return isAllowed;
}
}