package http.resource; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import nebula.data.DataStore; import nebula.data.Entity; import nebula.data.impl.EditableEntity; import nebula.server.Resource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class LoginListResouce implements Resource { protected Log log = LogFactory.getLog(this.getClass()); private final DataStore<Entity> users; private final DataStore<Entity> userAccessLogs; final RedirectResouce redirectTo; private final String userKey; public LoginListResouce(DataStore<Entity> users, DataStore<Entity> userAccessLogs) { this.users = users; this.userAccessLogs = userAccessLogs; this.userKey = users.getType().getName() + users.getType().getKeyField().getName(); redirectTo = new RedirectResouce("/index.html"); } @Override public void handle(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("\tMethod" + req.getMethod()); } String method = req.getMethod(); if ("POST".equals(method)) { this.post(req, resp); } else { throw new RuntimeException("Unsupport method " + method); } } protected void post(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { String username = req.getParameter("username"); // String password = req.getParameter("password"); Entity user = users.get(username); if (user == null) { resp.setStatus(403); redirectTo.redirectTo(req, resp, "/login.html"); return; } resp.setStatus(200); HttpSession session = req.getSession(); session.setAttribute("#currentUser", user); session.setAttribute("Theme", "angularjs"); session.setAttribute("Skin", "unicorn"); // 用于在客户端显示用户登录ID Cookie cookieUserUD = new Cookie("LoginUserID", username); cookieUserUD.setPath("/"); resp.addCookie(cookieUserUD); // normal parse resp.addHeader("Cache-Control", "max-age=0"); resp.addHeader("Content-Language", "en-US"); resp.addHeader("Content-Type", "text/html"); resp.addIntHeader("Content-Length", 0); redirectTo.redirectTo(req, resp, "/u/" + req.getParameter("username")); // Log access info EditableEntity accessLog = new EditableEntity(); accessLog.put(userKey, user.getID()); accessLog.put("UserAction", "Login"); accessLog.put("RemoteAddr", req.getRemoteAddr()); accessLog.put("RemoteHost", req.getRemoteHost()); accessLog.put("Timestamp", System.currentTimeMillis()); userAccessLogs.add(accessLog); userAccessLogs.flush(); resp.flushBuffer(); // // Entity data = datas.createNew(); // InputStream in = req.getInputStream(); // if (log.isTraceEnabled()) { // in = FileUtil.print(in); // } // json.readFrom(data, in); // // // datas.add(data); // datas.flush(); } finally { } } }