1 41 package com.mvnforum.user; 42 43 import java.io.IOException ; 44 45 import javax.servlet.ServletContext ; 46 import javax.servlet.ServletException ; 47 import javax.servlet.http.*; 48 49 import com.mvnforum.*; 50 import com.mvnforum.auth.*; 51 import com.mvnforum.db.WatchBean; 52 import net.myvietnam.mvncore.db.DBUtils; 53 import net.myvietnam.mvncore.filter.IPFilter; 54 import net.myvietnam.mvncore.filter.UserAgentFilter; 55 import net.myvietnam.mvncore.util.*; 56 57 import org.apache.commons.logging.Log; 58 import org.apache.commons.logging.LogFactory; 59 60 public class ForumUserServlet extends HttpServlet { 61 62 private static Log log = LogFactory.getLog(ForumUserServlet.class); 63 64 private UserModuleProcessor userModuleProcessor = null; 65 private static int count = 0; 66 67 68 public void init() throws ServletException { 69 73 userModuleProcessor = new UserModuleProcessor(this); 75 if (MVNForumConfig.isShouldRun()) { 77 ServletContext context = getServletContext(); 78 int majorVersion = context.getMajorVersion(); 79 int mimorVersion = context.getMinorVersion(); 80 if ((majorVersion < 2) || 81 ((majorVersion == 2) && (mimorVersion < 3))) { 82 MVNForumConfig.setShouldRun(false, "mvnForum requires Servlet 2.3 or later. Please upgrade your Servlet Container."); 83 } 84 } 85 86 if (MVNForumConfig.getEnableWatch()) { 88 if (MVNForumConfig.isShouldRun()) { 89 log.info("Schedule the WatchTask."); 90 if (MVNForumConfig.getDefaultWatchOption() == WatchBean.WATCH_OPTION_LIVE) { 91 WatchTask.getInstance().schedule(DateUtil.MINUTE, DateUtil.MINUTE * 5); 93 } else { 94 WatchTask.getInstance().schedule(DateUtil.MINUTE, DateUtil.HOUR); 96 } 97 } 98 } else { 99 log.info("Watch is disabled. Do not schedule the WatchTask."); 100 } 101 102 if (MVNForumConfig.isShouldRun()) { 104 log.info("Schedule the DeleteOrphanPmAttachmentTask."); 105 if (MVNForumConfig.getEnableMessageAttachment()) { 106 DeleteOrphanPmAttachmentTask.getInstance().schedule(DateUtil.MINUTE, DateUtil.HOUR); 108 } else { 109 DeleteOrphanPmAttachmentTask.getInstance().schedule(DateUtil.MINUTE); 111 } 112 } 113 log.info("<<---- ForumUserServlet has been inited. Detailed info: " + MVNForumInfo.getProductVersion() + " (Build: " + MVNForumInfo.getProductReleaseDate() + ") ---->>"); 114 } 115 116 117 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 118 process(request, response); 119 } 120 121 122 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 123 process(request, response); 124 } 125 126 public void process(HttpServletRequest request, HttpServletResponse response) 127 throws IOException , ServletException { 128 129 if (MVNForumConfig.isShouldRun() == false) { 130 String error = "Cannot init system. Reason : " + MVNForumConfig.getReason(); 131 request.setAttribute("fatal_error_message", error); 132 getServletContext().getRequestDispatcher("/mvnplugin/mvnforum/mvnfatalerror.jsp").forward(request, response); 133 return; 134 } 135 136 long startTime = 0; 137 if (log.isDebugEnabled()) { 138 startTime = System.currentTimeMillis(); 139 } 140 count++; 141 try { 142 if (IPFilter.filter(request) == false) { 143 getServletContext().getRequestDispatcher("/mvnplugin/mvnforum/404.jsp").forward(request, response); 144 return; 145 } 146 if (UserAgentFilter.filter(request) == false) { 147 getServletContext().getRequestDispatcher("/mvnplugin/mvnforum/404.jsp").forward(request, response); 148 return; 149 } 150 151 153 String responseURI = null; 154 responseURI = ManagerFactory.getRequestProcessor().preLogin(request, response); 155 156 OnlineUserManager onlineUserManager = OnlineUserManager.getInstance(); 159 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 160 OnlineUserAction action = onlineUser.getOnlineUserAction(); 161 162 if (action.getRemoteAddr().equals(request.getRemoteAddr()) == false) { 163 request.getRequestDispatcher("/mvnplugin/mvnforum/invalidsession.html").forward(request, response); 164 return; 165 } 166 167 if (MVNForumConfig.getShouldShowUserArea() == false) { 170 if (!onlineUser.getPermission().canAdminSystem()) { 171 request.getRequestDispatcher("/mvnplugin/mvnforum/turnoff.html").forward(request, response); 172 return; 173 } 174 } 175 176 String localeName = ParamUtil.getParameter(request, MVNForumConfig.getLocaleParameterName()); 178 if (MVNForumConfig.supportLocale(localeName)) { 179 onlineUser.setLocaleName(localeName); 180 } 181 I18nUtil.setLocaleInRequest(request, onlineUser.getLocale()); 182 183 186 if (null == responseURI) { 187 responseURI = ManagerFactory.getRequestProcessor().preProcess(request, response); 188 } 189 190 if (null == responseURI) { 191 responseURI = userModuleProcessor.process(request, response); 193 } 194 195 responseURI = ManagerFactory.getRequestProcessor().postProcess(request, response, responseURI); 196 197 if ((null != responseURI) && !response.isCommitted()) { 198 if (responseURI.startsWith("http://") || responseURI.startsWith("https://")) { 199 response.sendRedirect(responseURI); 200 } else { 201 if (responseURI.endsWith(".jsp")) { 202 request.getRequestDispatcher(responseURI).forward(request, response); 203 } else { 204 response.sendRedirect(request.getContextPath() + responseURI); 205 } 206 } 207 } 208 } catch (Exception e) { 209 log.error("Error assertion", e); 211 } finally { 212 if (log.isDebugEnabled()) { 213 long processTime = System.currentTimeMillis() - startTime; 214 log.debug("ForumUserServlet processed " + count + " times. Took " + processTime + " miliseconds.\n"); 215 } 216 } 217 } 219 222 public void destroy() { 223 DBUtils.closeAllConnections(); 226 227 TimerUtil.getInstance().cancel(); 229 log.info("<<---- ForumUserServlet has been destroyed. ---->>"); 230 } 231 } 232 | Popular Tags |