package cn.edu.njupt.allgo.service.action;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONObject;
import org.apache.catalina.websocket.WsOutbound;
import cn.edu.njupt.allgo.service.dao.LoginDAO;
import cn.edu.njupt.allgo.service.dao.impl.LogDAOimpl;
import cn.edu.njupt.allgo.service.utils.ServletHelper;
import cn.edu.njupt.allgo.service.vo.UserDataVo;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private LoginDAO dao;
private final Map<Integer, HttpSession> loginUserMap = new ConcurrentHashMap<Integer, HttpSession>();
//String name = request.getHeader("userid");
//String name = new String(request.getParameter("userid").getBytes("ISO-8859-1"), "UTF-8");
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request , response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletHelper helper = new ServletHelper(request,response);
String uname = helper.getStr("uname");
String upassword = helper.getStr("upassword");
UserDataVo userdata = dao.login(uname, upassword);
if(userdata != null){
if (loginUserMap.get(userdata.getUid()) != null) {
// 当前用户存在未过期session 删除旧用户
HttpSession sessionold = loginUserMap.get(userdata.getUid());
if(sessionold != null){
// 注销已在线用户session
sessionold.invalidate();
loginUserMap.remove(userdata.getUid());
@SuppressWarnings("unchecked")
Map<Integer, WsOutbound> userMap = (Map<Integer, WsOutbound>) getServletContext().getAttribute("OnLineList");
WsOutbound outbound = userMap.get(userdata.getUid());
if(outbound!=null){
Map<String, Object> outMap = new HashMap<String, Object>();
outMap.put("response", "notlogin");
String jsonString = JSONObject.fromObject(outMap).toString();
CharBuffer buffer = CharBuffer.wrap(jsonString);
try {
outbound.writeTextMessage(buffer);
outbound.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
HttpSession session = request.getSession();
session.setMaxInactiveInterval(432000); //设置过期时间5天
session.setAttribute("uid", userdata.getUid());
session.setAttribute("uname", userdata.getUname());
loginUserMap.put(userdata.getUid(), session);
helper.put("response", "login");
helper.put("userdata", userdata);
helper.put("SessionId", session.getId());
}else{
helper.put("response", "error");
Map<String , Object> outMap = new HashMap<String , Object>() ;
outMap.put("text", "用户名或密码错误");
helper.put("error",outMap);
}
helper.send();
}
@Override
public void init() throws ServletException {
super.init();
dao = new LogDAOimpl();
this.getServletContext().setAttribute("loginUserMap", loginUserMap);
}
}