Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   This is free and unencumbered software released into the public domain.
   Anyone is free to copy, modify, publish, use, compile, sell, or
   distribute this software, either in source code form or as a compiled
   binary, for any purpose, commercial or non-commercial, and by any
   In jurisdictions that recognize copyright laws, the author or authors
  of this software dedicate any and all copyright interest in the
  software to the public domain. We make this dedication for the benefit
  of the public at large and to the detriment of our heirs and
  successors. We intend this dedication to be an overt act of
  relinquishment in perpetuity of all present and future rights to this
  software under copyright law.
 package base.jee.servlet;
 import static base.jee.Constants.MAX_IP_ADDRESS_LENGTH;
 import static base.jee.Constants.MAX_SITE_LENGTH;

An extension of the HttpServlet that all web applications building upon this base library should extend from to gain access to the base library session and user information.
 public abstract class BaseServlet extends HttpServlet {
 	private static final long serialVersionUID = 1L;
 	public static final int HTTP_MOVED_TEMPORARILY = 302;
 	protected Settings settings;
 	protected JeeBase jee;
 	protected API api;
 	public BaseServlet(JeeBase jeethrows IOException {
 		this. = jee.getSettings();
 		this. = jee;
 		this. = jee.getAPI();
 	public final void doGet(HttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
 		String site = getSite(request);
 		response.setContentType("text/html; charset=UTF-8");
 		String token = (String)request.getAttribute("token");
 		if(token == null) {
 			for (Cookie cookie : request.getCookies()) {
 					token = cookie.getValue();
 		User u = .getAPI().getUserSession(sitetokengetIp(request));
 		String queryString = request.getQueryString();
 		if (queryString == null) {
 			.log("DEBUG""Accessing url: " + request.getRequestURI(), u);
 		} else {
 			.log("DEBUG""Accessing url: " + request.getRequestURI() + "?" + queryStringu);
 	public abstract void doGet(User uHttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException;
 	protected void doPost(HttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
 	public static String getSite(HttpServletRequest request) {
		String site = request.getHeader("Host");
		if(site == null) {
			return site;
		if(site.length() > ) {
			return null;
		int i = site.indexOf(':');
		if(i > 0) {
			site = site.substring(0, i);
		return site.toLowerCase();

Trust the forwarded header only if the connection comes over internal network.
	public static String getIp(HttpServletRequest requestthrows IOException {
		String ip = request.getRemoteAddr();
		/* Trust proxy/forwarded information if the source IP is a local ip address.
		 * This fails in some cases, such as if the web server and load balancer or
		 * reverse proxy use public IP addresses.
		if(ip.startsWith("10.") || ip.startsWith("172.") || ip.startsWith("192.168.") || ip.startsWith("127.") || ip.startsWith("0:0:0:0")) {
			if(request.getHeader("HTTP_X_FORWARDED_FOR") != null) {
				ip = request.getHeader("HTTP_X_FORWARDED_FOR");
			if(request.getHeader("X-Forwarded-For") != null) {
				ip = request.getHeader("X-Forwarded-For");
		if(ip != null) {
			if(ip.length() >  * 5) {
				throw new IOException("Malformed client HTTP request header");
		return ip;
New to GrepCode? Check out our FAQ X