public void doPost(HttpServletRequest request, HttpServletResponse response) {
		
		if( logger.isLoggable(Level.FINEST) ) { 
			logger.finest("Got post: " + request.toString());
		}
		
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
			logger.warning(e1.toString());
		}
		
		/**
		 * Check for flooding, except from localhost (used for stress-testing)
		 */
		if( request.getRemoteAddr().equals("127.0.0.1") == false && 
			System.getProperty("allow.flooding").equals(Boolean.FALSE.toString()) ) {
			if (recentPosts.containsKey(request.getRemoteAddr())) {
				Long time = recentPosts.get(request.getRemoteAddr());
				if (time + MIN_REGISTRATION_INTERVAL_MS > System.currentTimeMillis()) {
					response.setStatus(HttpServletResponse.SC_FORBIDDEN);
					logger.warning("Flooding from: " + request.getRemoteAddr() + " (last request: " + (new java.util.Date(time)).toString() + ", now: " + (new java.util.Date()) + ")");
					try {
						response.getOutputStream().write(CommunityConstants.REGISTRATION_RATE_LIMITED.getBytes());
						response.getOutputStream().flush();
						response.getOutputStream().close();
					} catch (IOException e) {
						logger.warning(e.toString());
					}
					recentPosts.put(request.getRemoteAddr(), System.currentTimeMillis());
					return;
				}
			}
			recentPosts.put(request.getRemoteAddr(), System.currentTimeMillis());
		}

		/**
		 * Actual request processing
		 */
		registerUser(request, response);
	}