平台默认提供的有在线用户的功能,要判断用户是否已登录,可以通过在线用户的数据判断
如果登录过获取到对用的bsessionid,调用注销的API强制注销
.j的具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
  
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.dom4j.Document;
  
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.justep.biz.client.ActionEngine;
import com.justep.biz.client.ActionResult;
import com.justep.biz.client.ActionUtils;
import com.justep.ui.JustepConfig;
import com.justep.ui.util.NetUtils;
  
  
public class Login extends com.justep.ui.impl.JProcessorImpl  {
    public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        
        String username = request.getParameter("username");
         
        //判断用户是否登录,如果登录强制注销
        ActionResult onLineResult = ActionEngine.invokeActions(JustepConfig.getBusinessServer() + "/onlineUsers", null, null, null, "application/json", "application/json", null, null, "get", null);
        JSONObject onLineContent = (JSONObject) onLineResult.getContent();
        JSONObject data = (JSONObject) ((JSONObject)onLineContent.get("data")).get("value");
        JSONArray ar = (JSONArray) data.get("rows");
        for (int i = 0; i < ar.size(); i++) {//解析在线用户数据的JSONArray
              JSONObject jsonObject = ar.getJSONObject(i);
              String name = (String) ((JSONObject)jsonObject.get("name")).get("value");
              String bsessionID = (String) ((JSONObject)jsonObject.get("sessionid")).get("value");
              if(name.equals(username)){
                ActionEngine.logout(bsessionID, ActionUtils.JSON_CONTENT_TYPE);     //注销已登录的当前用户             
            }
              
        }
 
        //用户登录
        JSONObject content = null;
        String bsessionid = "";
        //从cookie中获取已有的bsessionid
        Cookie[] cookies = request.getCookies();
        if (cookies != null){
            for (int i = 0; i < cookies.length; i++) {
              String name = cookies[i].getName();
              if(name.equals("bsessionid")){
                  bsessionid = cookies[i].getValue();
              }
            }
        }
        //判断bsessionid是否超时
        ActionResult checkResult = ActionEngine.checkSession(bsessionid, ActionUtils.JSON_CONTENT_TYPE);
        if (checkResult.isSessionTimeOut()) {
            String password = request.getParameter("password");                  
            String ip = request.getRemoteAddr();
            String language = "zh_CN";
            Date loginDate = new Date(System.currentTimeMillis());
            ActionResult actionResult = ActionEngine.login2(username, password, ip, language, loginDate, null, ActionUtils.JSON_CONTENT_TYPE, null);
            content = (JSONObject) actionResult.getContent();
            bsessionid = actionResult.getBSessionID();
            //把bsessionid放到Cookie中
            Cookie cookie = new Cookie("bsessionid",bsessionid);
            cookie.setMaxAge(-1);
            cookie.setPath("/");   
            response.addCookie(cookie);
        } else {
            content = (JSONObject) checkResult.getContent();
        }
        content.put("bsessionid", bsessionid);
        response.setCharacterEncoding("UTF-8");
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
        response.sendRedirect("/x5/UI2/portal/pc3/index.w"); 
        response.flushBuffer();
          
    }
}