这个是controller层
// 用户登录
@RequestMapping("/login")
public void login(User puser, HttpServletResponse response,
HttpServletRequest hr,String code) throws Exception {
//System.out.println(MD5.GetMD5Code(MD5.GetMD5Code(puser.getPassword())));
puser.setPassword(MD5.GetMD5Code(MD5.GetMD5Code(puser.getPassword())));
rs = userService.login(hr.getSession(), puser,hr,code);
result(rs, response);
}
这个是service层
@Override
public String login(HttpSession session,User puser,HttpServletRequest request,String code) {
//用户登录
Map<String,Object> p1 = new HashMap<String,Object>();
Map<String,Object> p = userMapper.login(puser);
String sessionCode = session.getAttribute("code").toString();
//防止绕过验证码
session.removeAttribute("code");
if (sessionCode == null) {
p1.put("flag", 0);
p1.put("userState", 2);
return response(p1);
}
if (!(code.toLowerCase()).equals(sessionCode.toLowerCase())) {
p1.put("flag",0);
p1.put("userState", 2);
return response(p1);
}
if(p==null || p.get("authIds")==null||TextUtil.getInt(p.get("userState"))==0){
p1.put("flag",0);
if(p!=null&&p.get("userState")!=null) {
p1.put("userState", TextUtil.getInt(p.get("userState")));
}
else {
p1.put("userState", 1);
}
return response(p1);
}
Map<String,Object> params=new HashMap<String,Object>();
params.put("userId", p.get("id"));
params.put("OS", SystemUtils.getRequestSystemInfo(request));
params.put("browser", SystemUtils.getRequestBrowserInfo(request));
params.put("type", 1);
params.put("loginDate", new Date());
userLoginLogMapper.insert(params);
Map login = (HashMap)(request.getSession().getServletContext().getAttribute("LOGIN"));
if(login==null){
login=new HashMap();
login.put(p.get("id")+"", request.getSession().getId());
request.getSession().getServletContext().setAttribute("LOGIN", login);
}else{
if(!login.containsKey(p.get("id")+"")){
login.put(p.get("id")+"", request.getSession().getId());
request.getSession().getServletContext().setAttribute("LOGIN", login);
}
}
if(login.containsKey( p.get("id")+"")&&!(""+login.get(p.get("id")+"")).equals(request.getSession().getId()+"")){
//2代表用户已在线
p1.put("flag",2);
}else{
//1代表登录成功
p1.put("flag",1);
}
List r = new ArrayList();
String[] pis = (p.get("authIds")+"").split(",");
for (int i = 0; i < pis.length; i++) {
r.add(pis[i]);
}
session.setAttribute("qx", (p.get("authIds")+""));
session.setAttribute(SystemContant.PRIVILEGES, r);
session.setAttribute("userName", p.get("userName")+"");
session.setAttribute("uid", p.get("id")+"");
session.setAttribute("roleName", p.get("roleName")+"");
session.setAttribute("realName", p.get("realName")+"");
return response(p1);
}
这个是过滤器
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
// 获得用户请求的URI
String path = request.getRequestURI();
String contextPath = request.getContextPath();
String url = path.substring(contextPath.length());
// System.out.println("=================CheckLoginFilter url=" + path);
/*
* Person person =SessionUtils.getPerson(request);
*
* if (person == null) {
* response.sendRedirect(contextPath+"/person.do?method=tologin");
* return;
* }
* if (person.getId()!=null&&person.getPassword()!=null) {
* filterChain.doFilter(servletRequest, servletResponse);
* return;
* }
*/
String indexPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/login.jsp";
// System.out.println("=================CheckLoginFilter indexPath=" + indexPath);
if (path.indexOf(".jsp") > 0 & path.indexOf("login") == -1) {
// 是否登陆
String uid = request.getSession().getAttribute("uid") + "";
if (uid == null || "".equals(uid) || "null".equals(uid)) {
response.sendRedirect(indexPath);
}
else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
这个是前端jsp的登录回调
//登录回调
function getStaff4loginCallBack(data) {
debugger;
submit = false;
if(!data)
{
alert("用户已在线,请先退出之前用户!");
changeImg();
submit = false;
return;
}
if (data.flag == 0) {
if(data.userState==2){
alert("验证码错误!");
}else{
alert("登录失败,请检查用户名和密码是否有误!");
}
changeImg();
submit = false;
return;
}
else if (data.flag == 2) {
alert("用户已在线,请先退出之前用户!");
changeImg();
submit = false;
return;
}
else {
//指向首页
window.location='main.jsp';
}
}
他原本这个代码做的是第一个人用账号A登录的时候登录上了,第二个人同样用账号A来登录的时候,就登不上会提示下线。现在要改成第一个人用账号A登录上了,可以登上,第二个人用账号A登录上也可以登上,但是第一个人要下线。应该怎么改?