1 package com.atlassian.core.servlet;
2
3 import org.apache.log4j.Category;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.ServletRequest;
7 import javax.servlet.ServletResponse;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.io.IOException;
12 import java.util.Enumeration;
13
14
15
16
17
18
19
20
21
22
23 public abstract class AbstractNoOpServlet extends HttpServlet
24 {
25 private static final Category log = Category.getInstance(AbstractNoOpServlet.class);
26 private static final String RECEIVED_UNEXPECTED_REQUEST = "NoOpServlet received an unexpected request.";
27 private static final String UNABLE_TO_HANDLE_REQUEST = "Unable to handle request. Request is not a HttpServletRequest";
28
29 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException
30 {
31 log.warn(RECEIVED_UNEXPECTED_REQUEST);
32
33 if (!(servletRequest instanceof HttpServletRequest && servletResponse instanceof HttpServletResponse))
34 {
35 log.error(UNABLE_TO_HANDLE_REQUEST);
36 return;
37 }
38 HttpServletRequest request = (HttpServletRequest) servletRequest;
39 HttpServletResponse response = (HttpServletResponse) servletResponse;
40
41
42 logUserInformation(request);
43 logRequestInformation(request);
44
45
46 response.sendError(404, RECEIVED_UNEXPECTED_REQUEST + " More information is available in the log file.");
47 }
48
49 private void logUserInformation(HttpServletRequest request)
50 {
51 String username = getUserName(request);
52 if (username != null)
53 {
54 log.warn("User: " + username);
55 }
56 else
57 {
58 log.warn("User: Anonymous (Not logged in)");
59 }
60 }
61
62
63
64
65
66
67 protected abstract String getUserName(HttpServletRequest request);
68
69
70
71
72
73 private void logRequestInformation(HttpServletRequest request)
74 {
75 try
76 {
77 log.warn("Request Information");
78 log.warn("- Request URL: " + request.getRequestURL());
79 log.warn("- Query String: " + (request.getQueryString() == null ? "" : request.getQueryString()));
80
81 log.warn("Request Attributes");
82 Enumeration attributeNames = request.getAttributeNames();
83 while (attributeNames.hasMoreElements())
84 {
85 String name = (String) attributeNames.nextElement();
86 Object attribute = request.getAttribute(name);
87 log.warn("- " + name + ": " + (attribute == null ? "null" : attribute.toString()));
88 }
89 }
90 catch (Throwable t)
91 {
92 log.error("Error rendering logging information" + t);
93 }
94 }
95 }