List of usage examples for javax.servlet.http HttpServletRequestWrapper HttpServletRequestWrapper
public HttpServletRequestWrapper(HttpServletRequest request)
From source file:edu.harvard.hul.ois.pds.ws.PDSWebService.java
/** * Process HTTP GET request./*ww w .j a v a2s . c om*/ */ public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, FileNotFoundException { HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(req); //Get parameters from the URL String sOp = req.getParameter("op"); char op = 'f'; if (sOp != null) { op = sOp.charAt(0); } String uri = req.getRequestURI(); uri = uri.substring(1); String[] uriElements = uri.split("/"); Integer id = null; String action = null; if (uriElements.length > 2) { action = uriElements[1]; if (action.equalsIgnoreCase(API_SEARCH)) //go straight to fts { String docParam; if ((uriElements[2]).equalsIgnoreCase("global")) { docParam = ""; } else { try { id = new Integer(uriElements[2]); } catch (Exception e) { printError(req, res, "Invalid DRS ID", null); return; } docParam = "G=" + id + "&"; } String format = ""; format = req.getParameter("F"); if (format != null) { format = "&F=" + format; } else { format = "&F=M"; } String range = ""; String advparams = ""; range = req.getParameter("B"); if (range != null) { range = "&B=" + range; } else { range = ""; } String dataQualification = ""; dataQualification = req.getParameter("D"); if (dataQualification != null) { dataQualification = "&D=" + dataQualification; } else { dataQualification = ""; } String contextScope = ""; contextScope = req.getParameter("C"); if (contextScope != null) { contextScope = "&C=" + contextScope; } else { contextScope = ""; } String jumplistRefs = ""; jumplistRefs = req.getParameter("J"); if (jumplistRefs != null) { jumplistRefs = "&J=" + jumplistRefs; } else { jumplistRefs = ""; } String lowerDate = ""; lowerDate = req.getParameter("L"); if (lowerDate != null) { lowerDate = "&L=" + lowerDate; } else { lowerDate = ""; } String upperDate = ""; upperDate = req.getParameter("U"); if (upperDate != null) { upperDate = "&U=" + upperDate; } else { upperDate = ""; } String resultsize = ""; resultsize = req.getParameter("P"); if (resultsize != null) { resultsize = "&P=" + resultsize; } else { resultsize = ""; } advparams = resultsize + range + dataQualification + contextScope + jumplistRefs + lowerDate + upperDate; //Log the search page request WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("search"); message.setMessage("Search Request: " + id); logger.info(message); String Query = req.getParameter("Q"); if (Query == null) { Query = ""; } try { String queryString = new String("?" + docParam + "Q=" + Query + format + advparams); wrapper.setAttribute("searchurl", ftsUrl + queryString); RequestDispatcher rd = req.getRequestDispatcher("/api-search.jsp?"); rd.forward(req, res); //res.sendRedirect(ftsUrl+queryString); return; } catch (Exception e) { message = new WebAppLogMessage(req, true); message.setContext("main"); Throwable root = e; if (e instanceof ServletException) { ServletException se = (ServletException) e; Throwable t = se.getRootCause(); if (t != null) { logger.error(message, t); root = t; } else { logger.error(message, se); } } else { logger.error(message, e); } printError(req, res, "PDS-WS Error", root); } } try { id = new Integer(uriElements[2]); } catch (Exception e) { } } if (id == null) { printError(req, res, "Invalid DRS ID", null); return; } String n = req.getParameter("n"); if (n == null) { n = "1"; } else if (n.equals("")) { printError(req, res, "Page not found", null); return; } //Set scaling factors. s overrides imagesize. Image size select //boxes are based on S. String scale = req.getParameter("s"); String imagesize = req.getParameter("imagesize"); if (scale == null || !(scale.equals("2") || scale.equals("4") || scale.equals("6") || scale.equals("8"))) { if (imagesize != null && imagesize.equals("300")) { scale = "8"; } else if (imagesize != null && imagesize.equals("600")) { scale = "6"; } else if (imagesize != null && imagesize.equals("1200")) { scale = "4"; } else if (imagesize != null && imagesize.equals("2400")) { scale = "2"; } else { scale = "4"; } } if (imagesize == null || !(imagesize.equals("300") || imagesize.equals("600") || imagesize.equals("1200") || imagesize.equals("2400"))) { if (scale.equals("2")) { imagesize = "2400"; } else if (scale.equals("4")) { imagesize = "1200"; } else if (scale.equals("6")) { imagesize = "600"; } else if (scale.equals("8")) { imagesize = "300"; } } String jp2Rotate = req.getParameter("rotation"); if (jp2Rotate == null || jp2Rotate.equals("360") || jp2Rotate.equals("-360")) { jp2Rotate = "0"; } else if (jp2Rotate.equals("-90")) { jp2Rotate = "270"; } String jp2x = req.getParameter("jp2x"); if (jp2x == null) { jp2x = "0"; } String jp2y = req.getParameter("jp2y"); if (jp2y == null) { jp2y = "0"; } String jp2Res = req.getParameter("jp2Res"); String bbx1 = req.getParameter("bbx1"); if (bbx1 == null) { bbx1 = "0"; } String bby1 = req.getParameter("bby1"); if (bby1 == null) { bby1 = "0"; } String bbx2 = req.getParameter("bbx2"); if (bbx2 == null) { bbx2 = "0"; } String bby2 = req.getParameter("bby2"); if (bby2 == null) { bby2 = "0"; } String printThumbnails = req.getParameter("printThumbnails"); if (printThumbnails == null) { printThumbnails = "no"; } wrapper.setAttribute("printThumbnails", printThumbnails); //cg debug System.out.println("debug1- imagesize: " + imagesize + " jp2Res: " + jp2Res + " scale: " + scale); String clickX = req.getParameter("thumbnail.x"); if (clickX != null) { wrapper.setAttribute("clickX", clickX); } else { clickX = (String) wrapper.getAttribute("clickX"); } String clickY = req.getParameter("thumbnail.y"); if (clickX != null) { wrapper.setAttribute("clickY", clickY); } else { clickY = (String) wrapper.getAttribute("clickY"); } //cg debug System.out.println("debug1- thumbnail.x: " + clickX); System.out.println("debug1- X: " + req.getParameter("x")); System.out.println("debug1- thumbnail.y: " + clickY); System.out.println("debug1- Y: " + req.getParameter("y")); /********************************************************** * Create new, or use existing Session **********************************************************/ HttpSession session = req.getSession(true); PdsUserState pdsUser = (PdsUserState) session.getAttribute("PdsUser"); CacheItem item = memcache.getObject(pdsUser.getMeta()); InternalMets mets = item.getMets(); //compare request header if-modified-since with METS DRS last modified //TODO This is temporarily disabled to allow crawlers access to updated // content that they may have already indexed /* Date metsLastModified = item.getLastModifiedDate(); try { long header = req.getDateHeader("If-Modified-Since"); if (header > 0) { Date headerDate = new Date(header); if (metsLastModified.before(headerDate)) { res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } } } catch (Exception e) { e.printStackTrace(); // we just ignore this } */ //Set the last modified response value //TODO Warning - this causes browsers to have problems refreshing the // navigation tree html. Possibly this can be set for the content and // citation frames? //res.setDateHeader("Last-Modified", metsLastModified.getTime()); /****************************************************************************** * Get the flags for if doing a page number (p) or sequence number(s) page find * If p is null, look up sequence, if it is not null, look up with page number. * if getContentPage returns null, the page does not exist or an invalid number was * entered. ******************************************************************************/ PageDiv pdiv = null; try { String pageMode = req.getParameter("P"); if (pageMode == null || !pageMode.equals("p")) { pageMode = "s"; } //if a page number search trim n if (pageMode.equals("p")) { n = n.replace(']', ' '); n = n.replace('[', ' '); n = n.trim(); } pdiv = mets.getContentPage(n, pageMode); //if pdiv is a jpeg2000 and res is null then calculate default res value //SET DEFAULT SIZE IF RES NOT SET if (jp2Res == null && pdiv.getDefaultImageMimeType().equals("image/jp2")) { //judaica fix int maxJP2sz = getMaxJP2DisplaySize(pdiv.getDefaultImageID()); if ((maxJP2sz > 300) && (maxJP2sz < 600)) { maxJP2sz = 300; scale = "8"; } else if ((maxJP2sz > 600) && (maxJP2sz < 1200)) { maxJP2sz = 600; scale = "6"; } else if ((maxJP2sz > 1200) && (maxJP2sz < 2400)) { maxJP2sz = 1200; scale = "4"; } else if (maxJP2sz > 2400) { maxJP2sz = 2400; scale = "2"; } String origImagesize = imagesize; if (Integer.parseInt(imagesize) > maxJP2sz) { imagesize = Integer.toString(maxJP2sz); } String filepath = getFilePath(pdiv.getDefaultImageID()); Jpeg2000 jp2 = new Jpeg2000(new File(filepath)); int newRes = jp2.findResolutionLevelContainedBy(Integer.parseInt(origImagesize), Integer.parseInt(origImagesize)); //convert Res to a scaling decimal if (newRes == 1) jp2Res = "1"; else if (newRes == 2) jp2Res = ".5"; else if (newRes == 3) jp2Res = ".25"; else if (newRes == 4) jp2Res = ".125"; else if (newRes == 5) jp2Res = ".0625"; else if (newRes > 5) { jp2Res = "0.625"; } //recalculate newRes if judaica maxres has changed //the actual imagesize if (!imagesize.equals(origImagesize)) { int oldImgsize = Integer.parseInt(origImagesize); int newImgsize = Integer.parseInt(imagesize); float factor = (oldImgsize / newImgsize) / 2; System.out.println("new factor: " + Double.toString(factor)); jp2Res = Double.toString(Double.parseDouble(jp2Res) / factor); } //cg debug //System.out.println("debug2- newRes: " + newRes + " jp2Res is now: " + jp2Res + " scale: " + scale ); } if (pdiv != null && pageMode.equals("p")) { n = String.valueOf(pdiv.getOrder()); //to keep n in the address bar current, redirect to new URL with equivalent n value of page number res.sendRedirect(pdsUrl + "/view/" + id + "?n=" + n + "&s=" + scale + (imagesize != null ? "&imagesize=" + imagesize : "") + (jp2Res != null ? "&jp2Res=" + jp2Res : "") + (jp2Rotate != null ? "&rotation=" + jp2Rotate : "")); return; } } catch (Exception e) { WebAppLogMessage message = new WebAppLogMessage(); message.setContext("find page"); message.setMessage("invalid page number"); message.processSessionRequest(req); logger.error(message, e); } if (pdiv == null) { printError(req, res, "Page not found", null); return; } /********************************************************** * Process appropriately based on the op variable. **********************************************************/ try { /************************* * If image is a JP2 and this is not a frame request, figure * out x,y to create bounding box on thumbnail ***********************/ if (pdiv.getDefaultImageMimeType().equals("image/jp2") && (op != OP_CITATION && op != OP_CONTENT && op != OP_NAVIGATION)) { //judaica fix int maxJP2size = getMaxJP2DisplaySize(pdiv.getDefaultImageID()); if ((maxJP2size > 300) && (maxJP2size < 600)) { maxJP2size = 300; scale = "8"; } else if ((maxJP2size > 600) && (maxJP2size < 1200)) { maxJP2size = 600; scale = "6"; } else if ((maxJP2size > 1200) && (maxJP2size < 2400)) { maxJP2size = 1200; scale = "4"; } else if (maxJP2size > 2400) { maxJP2size = 2400; scale = "2"; } if (Integer.parseInt(imagesize) > maxJP2size) { imagesize = Integer.toString(maxJP2size); } String jp2Action = req.getParameter("action"); if (jp2Action == null) { jp2Action = "noaction"; } int vHeight = Integer.parseInt(imagesize); int vWidth = Integer.parseInt(imagesize); double imgres = Double.parseDouble(jp2Res); //int tWidth = Integer.parseInt(req.getParameter("thumbwidth")); //int tHeight = Integer.parseInt(req.getParameter("thumbheight")); String filepath = getFilePath(pdiv.getDefaultImageID()); Coordinate dimension = new Coordinate(); int x = Integer.parseInt(jp2x); int y = Integer.parseInt(jp2y); Jpeg2000 jp2 = new Jpeg2000(new File(filepath)); //String clickX = req.getParameter("thumbnail.x"); //String clickY = req.getParameter("thumbnail.y"); int thumbX = -1; int thumbY = -1; if (clickX != null && clickY != null) { thumbX = Integer.parseInt(clickX); thumbY = Integer.parseInt(clickY); } if (jp2Action.equals("noaction")) { thumbX = 0; thumbY = 0; } else if (jp2Action.equals("jp2pan")) { x = thumbX; y = thumbY; //panThumbnail is passed thumbnail scale coordinates. It returns //thumbnail scale coordinates so the new X and Y do not need to be //extracted from the method return object dimension = UIUtil.panThumbnail(vHeight, vWidth, x, y, imgres, jp2, jp2Rotate); } else if (jp2Action.equals("jp2zoomin")) { dimension = UIUtil.zoom(vHeight, vWidth, x, y, imgres, jp2, true, jp2Rotate); Coordinate c = UIUtil.convertFullSizeCoordate(jp2, dimension.getX(), dimension.getY(), vWidth, vHeight, imgres, jp2Rotate); thumbX = c.getX(); thumbY = c.getY(); } else if (jp2Action.equals("jp2zoomout")) { dimension = UIUtil.zoom(vHeight, vWidth, x, y, imgres, jp2, false, jp2Rotate); Coordinate c = UIUtil.convertFullSizeCoordate(jp2, dimension.getX(), dimension.getY(), vWidth, vHeight, imgres, jp2Rotate); thumbX = c.getX(); thumbY = c.getY(); } else if (jp2Action.equals("jp2resize")) { String pres = req.getParameter("pres"); double pvRes = Double.valueOf(pres); String previousWidth = req.getParameter("pvWidth"); String previousHeight = req.getParameter("pvHeight"); int pvWidth = Integer.parseInt(previousWidth); int pvHeight = Integer.parseInt(previousHeight); dimension = UIUtil.centerOnResize(vHeight, vWidth, pvHeight, pvWidth, pvRes, x, y, imgres, jp2, jp2Rotate); Coordinate c = UIUtil.convertFullSizeCoordate(jp2, dimension.getX(), dimension.getY(), vWidth, vHeight, imgres, jp2Rotate); thumbX = c.getX(); thumbY = c.getY(); } else if (jp2Action.equals("jp2rotate")) { dimension = UIUtil.panThumbnail(vHeight, vWidth, 0, 0, imgres, jp2, jp2Rotate); thumbX = 0; thumbY = 0; } jp2x = String.valueOf(dimension.getX()); jp2y = String.valueOf(dimension.getY()); req.setAttribute("jp2x", jp2x); req.setAttribute("jp2y", jp2y); //set up coordinates to draw bounding box on thumbnail CoordinatePair bbCoors = UIUtil.getBoundingBoxDimensions(jp2, imgres, vWidth, vHeight, thumbX, thumbY, jp2Rotate); bbx1 = Integer.toString(bbCoors.getPoint1().getX()); bby1 = Integer.toString(bbCoors.getPoint1().getY()); bbx2 = Integer.toString(bbCoors.getPoint2().getX()); bby2 = Integer.toString(bbCoors.getPoint2().getY()); } wrapper.setAttribute("cite", mets.getCitationDiv()); wrapper.setAttribute("pdiv", pdiv); /*if(action.equalsIgnoreCase(ACTION_VIEW) || action.equalsIgnoreCase(ACTION_VIEW_TEXT)) { int imageId = pdiv.getDefaultImageID(); wrapper.setAttribute("lastPage",String.valueOf(mets.getCitationDiv().getLastPageNumber())); wrapper.setAttribute("imageId",String.valueOf(imageId)); wrapper.setAttribute("id",id); wrapper.setAttribute("n",n); wrapper.setAttribute("s",scale); wrapper.setAttribute("mime",pdiv.getDefaultImageMimeType()); wrapper.setAttribute("filepath",getFilePath(imageId)); wrapper.setAttribute("idsUrl",idsUrl); wrapper.setAttribute("cache",cache); wrapper.setAttribute("cacheUrl",pdsUrl+cacheUrl); wrapper.setAttribute("jp2Rotate",jp2Rotate); wrapper.setAttribute("jp2Res",jp2Res); wrapper.setAttribute("jp2x",jp2x); wrapper.setAttribute("jp2y",jp2y); wrapper.setAttribute("imagesize",imagesize); wrapper.setAttribute("bbx1",bbx1); wrapper.setAttribute("bby1",bby1); wrapper.setAttribute("bbx2",bbx2); wrapper.setAttribute("bby2",bby2); wrapper.setAttribute("pdsUrl",pdsUrl); wrapper.setAttribute("ids",idsUrl); wrapper.setAttribute("action",action); if (op == OP_CITATION) { if( pdiv.getDefaultImageMimeType().equals("image/jp2") ) { //get max res for biling code wrapper.setAttribute("maxjp2res", Integer.toString(getMaxJP2DisplaySize(pdiv.getDefaultImageID())) ); } RequestDispatcher rd = req.getRequestDispatcher("/citation.jsp?"); rd.forward(req,res); } else if (op == OP_CONTENT) { //get paths of the ocr files ArrayList<String> ocrPaths = new ArrayList<String>(); for(int i=0;i<pdiv.getOcrID().size();i++) { Integer ocr = (Integer) pdiv.getOcrID().get(i); ocrPaths.add(getFilePath(ocr.intValue())); } wrapper.setAttribute("ocrList",ocrPaths); //if image is a tiff, convert to gif if(pdiv.getDefaultImageMimeType().equals("image/tiff")) { String delv = cache + "/" + imageId + "-" + scale + ".gif"; File file = new File (delv); if (!file.exists ()) { Runtime rt = Runtime.getRuntime(); String tiffpath = getFilePath(imageId); String exec = giffy + " id=" + imageId + " path=" + tiffpath.substring(0,tiffpath.lastIndexOf("/")) + " scale=" + scale + " cache=" + cache; Process child = rt.exec (exec); child.waitFor(); child.destroy(); } } wrapper.setAttribute("caption",item.getImageCaption()); RequestDispatcher rd = req.getRequestDispatcher("/content.jsp?"); rd.forward(req,res); } else if (op == OP_NAVIGATION) { String treeIndex = req.getParameter("index"); String treeAction = req.getParameter("treeaction"); if (treeAction != null) { if (treeAction.equalsIgnoreCase("expand")) { pdsUser.setExpandedNodes(id,item.getAllNodesIndices()); } else if (treeAction.equalsIgnoreCase("collapse")) { pdsUser.setExpandedNodes(id,new ArrayList<String>()); } } if(treeIndex != null) { pdsUser.toggleNode(id,treeIndex); } wrapper.setAttribute("pdsUser",pdsUser); wrapper.setAttribute("maxThumbnails", maxThumbnails); //wrapper.setAttribute("toggleIndex",toggleIndex); //wrapper.setAttribute("treeaction",treeAction); RequestDispatcher rd = req.getRequestDispatcher("/navigation.jsp?"); rd.forward(req,res); } else { //Log the frameset request WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("frameset"); message.setMessage("Frameset Request: " + id); logger.info(message); RequestDispatcher rd = req.getRequestDispatcher("/frameset.jsp?"); rd.forward(req,res); } } else if (action.equalsIgnoreCase(ACTION_CITE_INFO)) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("fullcitation"); message.setMessage("Full Citation: " + id + " Seq: " + n); logger.info(message); wrapper.setAttribute("cite",mets.getCitationDiv()); wrapper.setAttribute("pdsUrl",pdsUrl); wrapper.setAttribute("id",id); wrapper.setAttribute("nStr", n+""); String repos = pdsUser.getMeta().getOwner(); if (repos == null || repos.equals("")) repos = "Harvard University Library"; String mainUrn = pdsUser.getMeta().getUrn(); String pageUrn = pdsUser.getMeta().getUrnFromList("?n=" +n); SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); String accDate = sdf.format(new Date()); wrapper.setAttribute("accDate", accDate); wrapper.setAttribute("repos", repos); wrapper.setAttribute("mainUrn", nrsUrl + "/" +mainUrn); wrapper.setAttribute("pageUrn", nrsUrl + "/" + pageUrn); StringBuffer sb = new StringBuffer(""); getAllSectionLabels(mets.getCitationDiv(), Integer.parseInt(n), sb); sb.delete(0,2); wrapper.setAttribute("sectLabels", sb.toString()); RequestDispatcher rd = req.getRequestDispatcher("/fullcitation.jsp?"); rd.forward(req,res); } else if (action.equalsIgnoreCase(ACTION_SEARCH)) { //Log the search page request WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("search"); message.setMessage("Search Request: " + id); logger.info(message); wrapper.setAttribute("cite",mets.getCitationDiv()); wrapper.setAttribute("ftsUrl",ftsUrl); wrapper.setAttribute("pdsUrl",pdsUrl); wrapper.setAttribute("id",id); RequestDispatcher rd = req.getRequestDispatcher("/search.jsp?"); rd.forward(req,res); } else if (action.equalsIgnoreCase(ACTION_PRINTOPS)) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("printops"); message.setMessage("print options: " + id); logger.info(message); wrapper.setAttribute("pdsUrl",pdsUrl); wrapper.setAttribute("id",id); wrapper.setAttribute("n",n); RequestDispatcher rd = req.getRequestDispatcher("/printoptions.jsp?"); rd.forward(req,res); } else if (action.equalsIgnoreCase(ACTION_PRINT)) { } else if (action.equalsIgnoreCase(ACTION_LINKS)) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("links"); message.setMessage("display links: " + id); logger.info(message); wrapper.setAttribute("cite",mets.getCitationDiv()); wrapper.setAttribute("id",id); wrapper.setAttribute("pdsUrl",pdsUrl); RequestDispatcher rd = req.getRequestDispatcher("/links.jsp?"); rd.forward(req,res); }*/ //START API CALLS if (action.equalsIgnoreCase(API_VIEW) || action.equalsIgnoreCase(API_VIEW_TEXT)) { //main api function. shows ocr'd pages int imageId = pdiv.getDefaultImageID(); wrapper.setAttribute("lastPage", String.valueOf(mets.getCitationDiv().getLastPageNumber())); wrapper.setAttribute("imageId", String.valueOf(imageId)); wrapper.setAttribute("id", id); wrapper.setAttribute("n", n); wrapper.setAttribute("s", scale); wrapper.setAttribute("mime", pdiv.getDefaultImageMimeType()); wrapper.setAttribute("filepath", getFilePath(imageId)); wrapper.setAttribute("idsUrl", idsUrl); wrapper.setAttribute("cache", cache); wrapper.setAttribute("cacheUrl", pdsUrl + cacheUrl); wrapper.setAttribute("jp2Rotate", jp2Rotate); wrapper.setAttribute("jp2Res", jp2Res); wrapper.setAttribute("jp2x", jp2x); wrapper.setAttribute("jp2y", jp2y); wrapper.setAttribute("imagesize", imagesize); wrapper.setAttribute("bbx1", bbx1); wrapper.setAttribute("bby1", bby1); wrapper.setAttribute("bbx2", bbx2); wrapper.setAttribute("bby2", bby2); wrapper.setAttribute("pdsUrl", pdsUrl); wrapper.setAttribute("ids", idsUrl); wrapper.setAttribute("action", action); //get paths of the ocr files ArrayList<String> ocrPaths = new ArrayList<String>(); for (int i = 0; i < pdiv.getOcrID().size(); i++) { Integer ocr = (Integer) pdiv.getOcrID().get(i); ocrPaths.add(getFilePath(ocr.intValue())); } wrapper.setAttribute("ocrList", ocrPaths); //if image is a tiff, convert to gif if (pdiv.getDefaultImageMimeType().equals("image/tiff")) { String delv = cache + "/" + imageId + "-" + scale + ".gif"; File file = new File(delv); if (!file.exists()) { Runtime rt = Runtime.getRuntime(); String tiffpath = getFilePath(imageId); String exec = giffy + " id=" + imageId + " path=" + tiffpath.substring(0, tiffpath.lastIndexOf("/")) + " scale=" + scale + " cache=" + cache; Process child = rt.exec(exec); child.waitFor(); child.destroy(); } } wrapper.setAttribute("caption", item.getImageCaption()); RequestDispatcher rd = req.getRequestDispatcher("/api-content.jsp?"); rd.forward(req, res); } else if (action.equalsIgnoreCase(API_LINKS)) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("links"); message.setMessage("display links: " + id); logger.info(message); wrapper.setAttribute("cite", mets.getCitationDiv()); wrapper.setAttribute("id", id); wrapper.setAttribute("pdsUrl", pdsUrl); wrapper.setAttribute("n", n); RequestDispatcher rd = req.getRequestDispatcher("/api-links.jsp?"); rd.forward(req, res); } else if (action.equalsIgnoreCase(API_CITE_INFO)) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("fullcitation"); message.setMessage("Full Citation: " + id + " Seq: " + n); logger.info(message); wrapper.setAttribute("cite", mets.getCitationDiv()); wrapper.setAttribute("pdsUrl", pdsUrl); wrapper.setAttribute("id", id); wrapper.setAttribute("nStr", n + ""); String repos = pdsUser.getMeta().getOwner(); if (repos == null || repos.equals("")) repos = "Harvard University Library"; String mainUrn = pdsUser.getMeta().getUrn(); String pageUrn = pdsUser.getMeta().getUrnFromList("?n=" + n); SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy"); String accDate = sdf.format(new Date()); wrapper.setAttribute("accDate", accDate); wrapper.setAttribute("repos", repos); wrapper.setAttribute("mainUrn", nrsUrl + "/" + mainUrn); wrapper.setAttribute("pageUrn", nrsUrl + "/" + pageUrn); StringBuffer sb = new StringBuffer(""); getAllSectionLabels(mets.getCitationDiv(), Integer.parseInt(n), sb); sb.delete(0, 2); wrapper.setAttribute("sectLabels", sb.toString()); RequestDispatcher rd = req.getRequestDispatcher("/api-fullcitation.jsp?"); rd.forward(req, res); } else if (action.equalsIgnoreCase(API_DOC_TREE)) { String treeIndex = req.getParameter("index"); String treeAction = req.getParameter("treeaction"); /*if (treeAction != null) { if (treeAction.equalsIgnoreCase("expand")) { pdsUser.setExpandedNodes(id,item.getAllNodesIndices()); } else if (treeAction.equalsIgnoreCase("collapse")) { pdsUser.setExpandedNodes(id,new ArrayList<String>()); } } if(treeIndex != null) { pdsUser.toggleNode(id,treeIndex); }*/ //expand the tree pdsUser.setExpandedNodes(id, item.getAllNodesIndices()); wrapper.setAttribute("pdsUser", pdsUser); wrapper.setAttribute("pdsUrl", pdsUrl); wrapper.setAttribute("cacheUrl", pdsUrl + cacheUrl); wrapper.setAttribute("cache", cache); wrapper.setAttribute("id", id); wrapper.setAttribute("n", n); wrapper.setAttribute("s", scale); wrapper.setAttribute("action", "get"); wrapper.setAttribute("idsUrl", idsUrl); wrapper.setAttribute("maxThumbnails", maxThumbnails); wrapper.setAttribute("jp2Rotate", jp2Rotate); wrapper.setAttribute("jp2x", jp2x); wrapper.setAttribute("jp2y", jp2y); wrapper.setAttribute("caption", item.getImageCaption()); //wrapper.setAttribute("toggleIndex",toggleIndex); //wrapper.setAttribute("treeaction",treeAction); RequestDispatcher rd = req.getRequestDispatcher("/api-navigation.jsp?"); rd.forward(req, res); } //todo? else if (action.equalsIgnoreCase(API_MAX_SECTIONS)) { } else if (action.equalsIgnoreCase(API_MAX_PAGES)) { } else if (action.equalsIgnoreCase(API_MAX_CHAPTERS)) { } } //END MAIN catch (Exception e) { WebAppLogMessage message = new WebAppLogMessage(req, true); message.setContext("main"); Throwable root = e; if (e instanceof ServletException) { ServletException se = (ServletException) e; Throwable t = se.getRootCause(); if (t != null) { logger.error(message, t); root = t; } else { logger.error(message, se); } } else { logger.error(message, e); } printError(req, res, "PDS-WS Error", root); } }
From source file:com.app.framework.web.MultipartFilter.java
/** * Wrap the given HttpServletRequest with the given parameterMap. * * @param request The HttpServletRequest of which the given parameterMap * have to be wrapped in.// w w w . ja v a2 s . c om * @param parameterMap The parameterMap to be wrapped in the given * HttpServletRequest. * @return The HttpServletRequest with the parameterMap wrapped in. */ private static HttpServletRequest wrapRequest(HttpServletRequest request, final Map<String, String[]> parameterMap) { return new HttpServletRequestWrapper(request) { public Map<String, String[]> getParameterMap() { return parameterMap; } public String[] getParameterValues(String name) { return parameterMap.get(name); } public String getParameter(String name) { String[] params = getParameterValues(name); return params != null && params.length > 0 ? params[0] : null; } public Enumeration<String> getParameterNames() { return Collections.enumeration(parameterMap.keySet()); } }; }
From source file:com.example.webapp.filter.MultipartFilter.java
/** * Wrap the given HttpServletRequest with the given parameterMap. * /*from ww w . j a v a 2 s . com*/ * @param request The HttpServletRequest of which the given parameterMap * have to be wrapped in. * @param parameterMap The parameterMap to be wrapped in the given * HttpServletRequest. * @return The HttpServletRequest with the parameterMap wrapped in. */ private static HttpServletRequest wrapRequest(HttpServletRequest request, final Map<String, String[]> parameterMap) { return new HttpServletRequestWrapper(request) { @Override public Map<String, String[]> getParameterMap() { return parameterMap; } @Override public String[] getParameterValues(String name) { return parameterMap.get(name); } @Override public String getParameter(String name) { String[] params = getParameterValues(name); return params != null && params.length > 0 ? params[0] : null; } @Override public Enumeration<String> getParameterNames() { return Collections.enumeration(parameterMap.keySet()); } }; }
From source file:org.apache.hadoop.security.token.delegation.web.DelegationTokenAuthenticationFilter.java
@Override protected void doFilter(FilterChain filterChain, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { boolean requestCompleted = false; UserGroupInformation ugi = null;/*from w w w. jav a2 s.c o m*/ AuthenticationToken authToken = (AuthenticationToken) request.getUserPrincipal(); if (authToken != null && authToken != AuthenticationToken.ANONYMOUS) { // if the request was authenticated because of a delegation token, // then we ignore proxyuser (this is the same as the RPC behavior). ugi = (UserGroupInformation) request .getAttribute(DelegationTokenAuthenticationHandler.DELEGATION_TOKEN_UGI_ATTRIBUTE); if (ugi == null) { String realUser = request.getUserPrincipal().getName(); ugi = UserGroupInformation.createRemoteUser(realUser, handlerAuthMethod); String doAsUser = getDoAs(request); if (doAsUser != null) { ugi = UserGroupInformation.createProxyUser(doAsUser, ugi); try { ProxyUsers.authorize(ugi, request.getRemoteAddr()); } catch (AuthorizationException ex) { HttpExceptionUtils.createServletExceptionResponse(response, HttpServletResponse.SC_FORBIDDEN, ex); requestCompleted = true; } } } UGI_TL.set(ugi); } if (!requestCompleted) { final UserGroupInformation ugiF = ugi; try { request = new HttpServletRequestWrapper(request) { @Override public String getAuthType() { return (ugiF != null) ? handlerAuthMethod.toString() : null; } @Override public String getRemoteUser() { return (ugiF != null) ? ugiF.getShortUserName() : null; } @Override public Principal getUserPrincipal() { return (ugiF != null) ? new Principal() { @Override public String getName() { return ugiF.getUserName(); } } : null; } }; super.doFilter(filterChain, request, response); } finally { UGI_TL.remove(); } } }
From source file:jetbrains.buildServer.server.rest.APIController.java
private HttpServletRequest modifyRequestHeader(final HttpServletRequest request, final String headerName, final String newValue) { return new HttpServletRequestWrapper(request) { @Override/*from w ww . j a va 2 s. c o m*/ public String getHeader(final String name) { if (headerName.equalsIgnoreCase(name)) { return newValue; } return super.getHeader(name); } @Override public Enumeration getHeaders(final String name) { if (headerName.equalsIgnoreCase(name)) { return Collections.enumeration(Collections.singletonList(newValue)); } return super.getHeaders(name); } }; }
From source file:jp.go.nict.langrid.servicesupervisor.ServiceSupervisor.java
@SuppressWarnings("unused") private static HttpServletRequest invoke2(FilterChain chain, HttpServletRequest request, HttpServletResponse response, String gridId, String serviceId) throws ServletException, IOException { final String sid = serviceId; HttpServletRequestWrapper wrequest = new HttpServletRequestWrapper(request) { @Override//w ww . j a va2s. c om public String getRequestURI() { String u = super.getRequestURI(); int i = u.lastIndexOf('/'); u = u.substring(0, i); return u + "/Translation?serviceName=" + sid; } @Override public String getPathInfo() { return "/Translation"; } }; request.getSession().getServletContext() .getRequestDispatcher("/axisServices/Translation?serviceName=" + serviceId) .include(wrequest, response); return wrequest; }
From source file:org.primeframework.mvc.test.RequestBuilder.java
void run() throws IOException, ServletException { // Remove the web objects if this instance is being used across multiple invocations ServletObjectsHolder.clearServletRequest(); ServletObjectsHolder.clearServletResponse(); // Build the request and response for this pass filter.doFilter(this.request, this.response, new FilterChain() { @Override//from w w w. j a va 2 s. com public void doFilter(ServletRequest request, ServletResponse response) { throw new UnsupportedOperationException("The RequestSimulator class doesn't support testing " + "URIs that don't map to Prime resources"); } }); // Add these back so that anything that needs them can be retrieved from the Injector after // the run has completed (i.e. MessageStore for the MVC and such) ServletObjectsHolder.setServletRequest(new HttpServletRequestWrapper(this.request)); ServletObjectsHolder.setServletResponse(this.response); }
From source file:io.druid.security.kerberos.KerberosAuthenticator.java
@Override public Filter getFilter() { return new AuthenticationFilter() { private Signer mySigner; @Override/*from ww w .j av a 2 s. co m*/ public void init(FilterConfig filterConfig) throws ServletException { ClassLoader prevLoader = Thread.currentThread().getContextClassLoader(); try { // AuthenticationHandler is created during Authenticationfilter.init using reflection with thread context class loader. // In case of druid since the class is actually loaded as an extension and filter init is done in main thread. // We need to set the classloader explicitly to extension class loader. Thread.currentThread().setContextClassLoader(AuthenticationFilter.class.getClassLoader()); super.init(filterConfig); String configPrefix = filterConfig.getInitParameter(CONFIG_PREFIX); configPrefix = (configPrefix != null) ? configPrefix + "." : ""; Properties config = getConfiguration(configPrefix, filterConfig); String signatureSecret = config.getProperty(configPrefix + SIGNATURE_SECRET); if (signatureSecret == null) { signatureSecret = Long.toString(new Random().nextLong()); log.warn("'signature.secret' configuration not set, using a random value as secret"); } final byte[] secretBytes = StringUtils.toUtf8(signatureSecret); SignerSecretProvider signerSecretProvider = new SignerSecretProvider() { @Override public void init(Properties config, ServletContext servletContext, long tokenValidity) throws Exception { } @Override public byte[] getCurrentSecret() { return secretBytes; } @Override public byte[][] getAllSecrets() { return new byte[][] { secretBytes }; } }; mySigner = new Signer(signerSecretProvider); } finally { Thread.currentThread().setContextClassLoader(prevLoader); } } // Copied from hadoop-auth's AuthenticationFilter, to allow us to change error response handling in doFilterSuper @Override protected AuthenticationToken getToken(HttpServletRequest request) throws IOException, AuthenticationException { AuthenticationToken token = null; String tokenStr = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals(AuthenticatedURL.AUTH_COOKIE)) { tokenStr = cookie.getValue(); try { tokenStr = mySigner.verifyAndExtract(tokenStr); } catch (SignerException ex) { throw new AuthenticationException(ex); } break; } } } if (tokenStr != null) { token = AuthenticationToken.parse(tokenStr); if (!token.getType().equals(getAuthenticationHandler().getType())) { throw new AuthenticationException("Invalid AuthenticationToken type"); } if (token.isExpired()) { throw new AuthenticationException("AuthenticationToken expired"); } } return token; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpReq = (HttpServletRequest) request; // If there's already an auth result, then we have authenticated already, skip this. if (request.getAttribute(AuthConfig.DRUID_AUTHENTICATION_RESULT) != null) { filterChain.doFilter(request, response); return; } if (loginContext == null) { initializeKerberosLogin(); } String path = ((HttpServletRequest) request).getRequestURI(); if (isExcluded(path)) { filterChain.doFilter(request, response); } else { String clientPrincipal = null; try { Cookie[] cookies = httpReq.getCookies(); if (cookies == null) { clientPrincipal = getPrincipalFromRequestNew((HttpServletRequest) request); } else { clientPrincipal = null; for (Cookie cookie : cookies) { if ("hadoop.auth".equals(cookie.getName())) { Matcher matcher = HADOOP_AUTH_COOKIE_REGEX.matcher(cookie.getValue()); if (matcher.matches()) { clientPrincipal = matcher.group(1); break; } } } } } catch (Exception ex) { clientPrincipal = null; } if (clientPrincipal != null) { request.setAttribute(AuthConfig.DRUID_AUTHENTICATION_RESULT, new AuthenticationResult(clientPrincipal, authorizerName, null)); } } doFilterSuper(request, response, filterChain); } // Copied from hadoop-auth's AuthenticationFilter, to allow us to change error response handling private void doFilterSuper(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { boolean unauthorizedResponse = true; int errCode = HttpServletResponse.SC_UNAUTHORIZED; AuthenticationException authenticationEx = null; HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; boolean isHttps = "https".equals(httpRequest.getScheme()); try { boolean newToken = false; AuthenticationToken token; try { token = getToken(httpRequest); } catch (AuthenticationException ex) { log.warn("AuthenticationToken ignored: " + ex.getMessage()); // will be sent back in a 401 unless filter authenticates authenticationEx = ex; token = null; } if (getAuthenticationHandler().managementOperation(token, httpRequest, httpResponse)) { if (token == null) { if (log.isDebugEnabled()) { log.debug("Request [{%s}] triggering authentication", getRequestURL(httpRequest)); } token = getAuthenticationHandler().authenticate(httpRequest, httpResponse); if (token != null && token.getExpires() != 0 && token != AuthenticationToken.ANONYMOUS) { token.setExpires(System.currentTimeMillis() + getValidity() * 1000); } newToken = true; } if (token != null) { unauthorizedResponse = false; if (log.isDebugEnabled()) { log.debug("Request [{%s}] user [{%s}] authenticated", getRequestURL(httpRequest), token.getUserName()); } final AuthenticationToken authToken = token; httpRequest = new HttpServletRequestWrapper(httpRequest) { @Override public String getAuthType() { return authToken.getType(); } @Override public String getRemoteUser() { return authToken.getUserName(); } @Override public Principal getUserPrincipal() { return (authToken != AuthenticationToken.ANONYMOUS) ? authToken : null; } }; if (newToken && !token.isExpired() && token != AuthenticationToken.ANONYMOUS) { String signedToken = mySigner.sign(token.toString()); createAuthCookie(httpResponse, signedToken, getCookieDomain(), getCookiePath(), token.getExpires(), isHttps); } doFilter(filterChain, httpRequest, httpResponse); } } else { unauthorizedResponse = false; } } catch (AuthenticationException ex) { // exception from the filter itself is fatal errCode = HttpServletResponse.SC_FORBIDDEN; authenticationEx = ex; if (log.isDebugEnabled()) { log.debug("Authentication exception: " + ex.getMessage(), ex); } else { log.warn("Authentication exception: " + ex.getMessage()); } } if (unauthorizedResponse) { if (!httpResponse.isCommitted()) { createAuthCookie(httpResponse, "", getCookieDomain(), getCookiePath(), 0, isHttps); // If response code is 401. Then WWW-Authenticate Header should be // present.. reset to 403 if not found.. if ((errCode == HttpServletResponse.SC_UNAUTHORIZED) && (!httpResponse.containsHeader( org.apache.hadoop.security.authentication.client.KerberosAuthenticator.WWW_AUTHENTICATE))) { errCode = HttpServletResponse.SC_FORBIDDEN; } if (authenticationEx == null) { // Don't send an error response here, unlike the base AuthenticationFilter implementation. // This request did not use Kerberos auth. // Instead, we will send an error response in PreResponseAuthorizationCheckFilter to allow // other Authenticator implementations to check the request. filterChain.doFilter(request, response); } else { // Do send an error response here, we attempted Kerberos authentication and failed. httpResponse.sendError(errCode, authenticationEx.getMessage()); } } } } }; }
From source file:org.apache.solr.servlet.SolrDispatchFilter.java
/** * Wrap the request's input stream with a close shield, as if by a {@link CloseShieldInputStream}. If this is a * retry, we will assume that the stream has already been wrapped and do nothing. * * @param request The request to wrap./*from w ww . j a v a 2 s .co m*/ * @param retry If this is an original request or a retry. * @return A request object with an {@link InputStream} that will ignore calls to close. */ private ServletRequest closeShield(ServletRequest request, boolean retry) { if (testMode && !retry) { return new HttpServletRequestWrapper((HttpServletRequest) request) { ServletInputStream stream; @Override public ServletInputStream getInputStream() throws IOException { // Lazy stream creation if (stream == null) { stream = new ServletInputStreamWrapper(super.getInputStream()) { @Override public void close() { assert false : "Attempted close of request input stream."; } }; } return stream; } }; } else { return request; } }
From source file:com.microsoft.azure.oidc.filter.helper.impl.SimpleAuthenticationHelper.java
private HttpServletRequest clearSessionCoookie(final HttpServletRequest httpRequest, final HttpServletResponse httpResponse, final Token token, final State state) { if (httpRequest == null || httpResponse == null || token == null || state == null) { throw new PreconditionException("Required parameter is null"); }// ww w .ja va 2 s .c o m final Cookie redisSessionCookie = getCookie(httpRequest, "SESSION"); final Cookie javaSessionCookie = getCookie(httpRequest, "JSESSIONID"); if (redisSessionCookie != null || javaSessionCookie != null) { if (token.getUserID().toString().equals(state.getUserID())) { if (redisSessionCookie != null && redisSessionCookie.getValue().equals(state.getSessionName())) { return httpRequest; } if (javaSessionCookie != null && javaSessionCookie.getValue().equals(state.getSessionName())) { return httpRequest; } } if (redisSessionCookie != null) { redisSessionCookie.setMaxAge(0); httpResponse.addCookie(redisSessionCookie); HttpSession session = httpRequest.getSession(false); if (session != null) { session.invalidate(); } } if (javaSessionCookie != null) { javaSessionCookie.setMaxAge(0); httpResponse.addCookie(javaSessionCookie); HttpSession session = httpRequest.getSession(false); if (session != null) { session.invalidate(); } } return new HttpServletRequestWrapper(httpRequest) { @Override public Cookie[] getCookies() { final List<Cookie> cookieList = new ArrayList<Cookie>(); for (Cookie cookie : httpRequest.getCookies()) { if (!cookie.getName().equals("SESSION") && !cookie.getName().equals("JSESSIONID")) { cookieList.add(cookie); } } final Cookie[] cookieArray = new Cookie[cookieList.size()]; cookieList.toArray(cookieArray); return cookieArray; } }; } return httpRequest; }