package cn.jcenterhome.web.filter; import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.jcenterhome.service.CacheService; import cn.jcenterhome.service.DataBaseService; import cn.jcenterhome.service.SpaceService; import cn.jcenterhome.util.BeanFactory; import cn.jcenterhome.util.Common; import cn.jcenterhome.util.CookieHelper; import cn.jcenterhome.util.JavaCenterHome; import cn.jcenterhome.util.SessionFactory; public class CommonFilter implements Filter { private String[] cacheNames = {"app", "userapp", "ad", "magic"}; private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService"); private CacheService cacheService = (CacheService) BeanFactory.getBean("cacheService"); private SpaceService spaceService = (SpaceService) BeanFactory.getBean("spaceService"); public void init(FilterConfig fc) throws ServletException { } @SuppressWarnings("unchecked") public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; request.setAttribute("IN_JCHOME", JavaCenterHome.IN_JCHOME); request.setAttribute("JCH_VERSION", JavaCenterHome.JCH_VERSION); request.setAttribute("JCH_RELEASE", JavaCenterHome.JCH_RELEASE); Map<String, Object> sGlobal = new HashMap<String, Object>(); long currentTime = System.currentTimeMillis(); int timestamp = (int) (currentTime / 1000); sGlobal.put("timestamp", timestamp); sGlobal.put("starttime", currentTime); request.setAttribute("sGlobal", sGlobal); Map<String, String> sCookie = CookieHelper.getCookies(request); Map<Integer, String> sNames = new HashMap<Integer, String>(); Map<String, Object> space = new HashMap<String, Object>(); request.setAttribute("sCookie", sCookie); request.setAttribute("sNames", sNames); request.setAttribute("space", space); if (SessionFactory.getSessionFactory() == null) { try { SessionFactory.buildSessionFactory(); } catch (SQLException e) { JavaCenterHome.jchConfig.clear(); Common.showMySQLMessage(response, "Can not connect to MySQL server", null, e); return; } } String jchRoot = JavaCenterHome.jchRoot; try { File configFile = new File(jchRoot + "data/cache/cache_config.jsp"); if (!configFile.exists()) { cacheService.updateCache(); } request.getRequestDispatcher("/data/cache/cache_config.jsp").include(request, response); } catch (Exception e) { response.getWriter().write(e.getMessage()); return; } for (String cacheName : cacheNames) { request.getRequestDispatcher("/data/cache/cache_" + cacheName + ".jsp") .include(request, response); } Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); Map<String, String> jchConfig = JavaCenterHome.jchConfig; if (Common.empty(jchConfig.get("sitename"))) { List<Map<String, Object>> configs = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("config") + " WHERE var IN ('jchid', 'sitename', 'close', 'adminemail', 'lastupdate')"); for (Map<String, Object> config : configs) { String variable = (String) config.get("var"); String value = (String) config.get("datavalue"); if (variable != null) { jchConfig.put(variable, value); } } } String sitekey = (String) sConfig.get("sitekey"); String mobile = request.getParameter("mobile"); String m_timestamp = request.getParameter("m_timestamp"); if (Common.empty(m_timestamp) || !Common.md5(m_timestamp + "\t" + sitekey).equals(mobile)) { mobile = null; } sGlobal.put("super_uid", 0); sGlobal.put("supe_username", ""); sGlobal.put("inajax", Common.intval(request.getParameter("inajax"))); sGlobal.put("mobile", mobile); sGlobal.put("refer", Common.trim(request.getHeader("Referer"))); if (Common.empty((String) sConfig.get("login_action"))) { sConfig.put("login_action", Common.md5("login" + Common.md5(sitekey))); } if (Common.empty((String) sConfig.get("register_action"))) { sConfig.put("register_action", Common.md5("register" + Common.md5(sitekey))); } if (Common.empty((String) sConfig.get("template"))) { sConfig.put("template", "default"); } String myTemplate = sCookie.get("mytemplate"); if (!Common.empty(myTemplate)) { myTemplate = myTemplate.trim().replace(".", ""); File styleFile = new File(jchRoot + "template/" + myTemplate + "/style.css"); if (styleFile.exists()) { sConfig.put("template", myTemplate); } else { CookieHelper.removeCookie(request, response, "mytemplate"); } } String requestURI = (String) request.getAttribute("requestURI"); if (requestURI == null) { String queryString = request.getQueryString(); if (Common.empty(queryString)) { requestURI = request.getRequestURI(); } else { requestURI = request.getRequestURI() + "?" + queryString; } request.setAttribute("requestURI", requestURI); if (requestURI != null) { String temp = Common.urlEncode(requestURI); if (temp.indexOf("<") >= 0 || temp.indexOf("\"") >= 0) { Map params = request.getParameterMap(); Common.sHtmlSpecialChars(params); } } } checkAuth(request, response, sGlobal, sConfig, sCookie); sGlobal.put("uhash", Common.md5(sGlobal.get("supe_uid") + "\t" + String.valueOf(timestamp).substring(0, 6))); getUserApp(request, sGlobal, sConfig); chain.doFilter(req, res); } private void checkAuth(HttpServletRequest request, HttpServletResponse response, Map<String, Object> sGlobal, Map<String, Object> sConfig, Map<String, String> sCookie) { String m_auth = request.getParameter("m_auth"); if (sGlobal.get("mobile") != null && m_auth != null) { sCookie.put("auth", m_auth); } String username = null; String auth = sCookie.get("auth"); if (auth != null && auth.length() > 0) { String[] values = Common.authCode(auth, "DECODE", null, 0).split("\t"); if (values.length > 1) { String password = values[0]; int supe_uid = Common.intval(values[1]); if (password.length() > 0 && supe_uid > 0) { List<Map<String, Object>> members = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("session") + " WHERE uid=" + supe_uid); if (members.size() > 0) { Map<String, Object> member = members.get(0); if (((String) member.get("password")).equals(password)) { username = (String) member.get("username"); sGlobal.put("supe_username", Common.addSlashes(username)); sGlobal.put("session", member); } else { supe_uid = 0; } } else { members = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("member") + " WHERE uid=" + supe_uid); if (members.size() > 0) { Map<String, Object> member = members.get(0); if (((String) member.get("password")).equals(password)) { username = (String) member.get("username"); String supe_username = Common.addSlashes(username); sGlobal.put("supe_username", supe_username); spaceService.insertSession(request, response, sGlobal, sConfig, supe_uid, supe_username, password); } else { supe_uid = 0; } } else { supe_uid = 0; } } } else { supe_uid = 0; } sGlobal.put("supe_uid", supe_uid); } } if (Common.empty(sGlobal.get("supe_uid"))) { CookieHelper.clearCookie(request, response); } else { sGlobal.put("username", username); } } private void getUserApp(HttpServletRequest request, Map<String, Object> sGlobal, Map<String, Object> sConfig) { int supe_uid = (Integer) sGlobal.get("supe_uid"); int my_status = (Integer) sConfig.get("my_status"); Map<Integer, Map<String, Object>> my_userapp = new HashMap<Integer, Map<String, Object>>(); List<Map<String, Object>> my_menu = new ArrayList<Map<String, Object>>(); int my_menu_more = 0; if (supe_uid > 0 && my_status > 0) { Map<String, Object> space = Common.getSpace(request, sGlobal, sConfig, supe_uid); int showCount = 0; List<Map<String, Object>> userApps = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("userapp") + " WHERE uid=" + supe_uid + " ORDER BY menuorder DESC"); if (userApps.size() > 0) { Map<Integer, Map<String, Object>> userApp = (Map<Integer, Map<String, Object>>) request .getAttribute("globalUserApp"); for (Map<String, Object> value : userApps) { int appId = (Integer) value.get("appid"); my_userapp.put(appId, value); if ((Integer) value.get("allowsidenav") > 0 && userApp.get(appId) == null) { int menuNum = (Integer) space.get("menunum"); if (menuNum < 5) { menuNum = 10; } if (menuNum > 100 || showCount < menuNum) { my_menu.add(value); showCount++; } else { my_menu_more = 1; } space.put("menunum", menuNum); } } } } sGlobal.put("my_userapp", my_userapp); sGlobal.put("my_menu", my_menu); sGlobal.put("my_menu_more", my_menu_more); } public void destroy() { } }