Selaa lähdekoodia

display-server新增唯一设备登陆场景

chengwb3 8 vuotta sitten
vanhempi
commit
edabef956a

+ 69 - 16
display-server/src/main/java/com/ai/server/bean/SceneBean.java

@ -1,17 +1,69 @@
1 1
package com.ai.server.bean;
2 2

3 3
import java.awt.image.BufferedImage;
4
import java.util.Map;
4 5
import java.util.Random;
6
import java.util.concurrent.ConcurrentHashMap;
5 7

8
import com.ai.ipu.server.cache.intf.ICache;
9
import com.ai.ipu.server.frame.session.ISession;
10
import com.ai.ipu.server.frame.session.impl.AbstractSessionManager;
6 11
import com.ai.ipu.server.util.MobileUtility;
7 12
import com.ai.server.core.bean.IpuAppBean;
8 13
import com.ai.server.core.context.IpuContextData;
9 14
import com.ai.server.core.session.IpuSessionManager;
15
import com.ai.server.util.Constant;
10 16
import com.ai.server.util.ImageVerify;
11 17
import com.ailk.common.data.IData;
12 18
import com.ailk.common.data.impl.DataMap;
13 19

14 20
public class SceneBean extends IpuAppBean {
21
    
22
    private static final String LOGIN_VERIFY_CODE_ERROR = "login_verify_code_error";
23
    private static final String LOGIN_USERPASSWORD_ERROR = "login_userpassword_error";
24
    
25
    private final static Map<String, String> uniqueAccounts = new ConcurrentHashMap<String, String>();
26
    
27
    public IData uniqueLogin(IData param) throws Exception {
28
        IData result = new DataMap();
29
        boolean loginResult = true;//用户名和密码校验逻辑实现
30
        if (loginResult) {
31
            String account = param.getString("ACCOUNT");
32
            String sessionIdOld = uniqueAccounts.get(account);
33
            ICache cache = AbstractSessionManager.getSessionCache();
34
            ISession session = (ISession) cache.get(sessionIdOld);
35
            if (sessionIdOld != null && session != null) {
36
                cache.remove(sessionIdOld);// 删除旧的session
37
            }
38

39
            IpuContextData contextData = new IpuContextData();
40
            contextData.put(Constant.Session.ACCOUNT, account);
41
            String sessionIdNew = IpuSessionManager.getInstance().createSession(contextData);
42
            uniqueAccounts.put(account, sessionIdNew);
43
            result.put("state", Constant.SUCCESS);
44
            result.put(Constant.Session.SESSION_ID, sessionIdNew);
45
            result.put(Constant.Session.ACCOUNT, account);
46
        }else{
47
            result.put("state", LOGIN_USERPASSWORD_ERROR);
48
        }
49

50
        return result;
51
    }
52

53
    public IData checkSessionAvailable(IData param) throws Exception {
54
        IData result = new DataMap();
55
        String sessionId = param.getString(Constant.Session.SESSION_ID);
56
        ICache cache = AbstractSessionManager.getSessionCache();
57
        ISession session = (ISession) cache.get(sessionId);
58
        if (sessionId != null && session != null) {
59
            result.put("sessionAvailable", true);
60
        }
61
        else {
62
            result.put("sessionAvailable", false);
63
        }
64

65
        return result;
66
    }
15 67

16 68
	/**
17 69
	 * 数据请求场景
@ -138,27 +190,28 @@ public class SceneBean extends IpuAppBean {
138 190
	 * 
139 191
	 * @param param
140 192
	 * @return
193
	 * @throws Exception 
141 194
	 */
142 195
	public IData login(IData param) {
143
		IData result = new DataMap();
196
        IData result = new DataMap();
144 197

145
		// 校验验证码是否输入正确
146
		if (!checkLoginVerifyCode(param)) {
147
			MobileUtility.error("登陆失败,验证码输入错误!");
148
			return result;
149
		}
198
        // 校验验证码是否输入正确
199
        if (!checkLoginVerifyCode(param)) {
200
            MobileUtility.error("登陆失败,验证码输入错误!");
201
            return result;
202
        }
150 203

151
		// 将用户信息保存至session
152
		try {
153
			getContextData().setAccount(param.getString("USER_NAME"));
154
			return getContextData().getData();
155
		} catch (Exception e) {
156
			// TODO Auto-generated catch block
157
			e.printStackTrace();
158
			return result;
159
		}
204
        // 将用户信息保存至session
205
        try {
206
            getContextData().setAccount(param.getString("USER_NAME"));
207
            return getContextData().getData();
208
        } catch (Exception e) {
209
            // TODO Auto-generated catch block
210
            e.printStackTrace();
211
            return result;
212
        }
160 213

161
	}
214
    }
162 215

163 216
	/**
164 217
	 * 

+ 2 - 0
display-server/src/main/java/com/ai/server/util/Constant.java

@ -1,6 +1,8 @@
1 1
package com.ai.server.util;
2 2

3 3
public class Constant {
4
    public static final String SUCCESS = "success";
5
    
4 6
	public static class Cache{
5 7
		public static final String SESSION_CACHE = "SESSION_CACHE";
6 8
	}

+ 3 - 0
display-server/src/main/resources/server-data.xml

@ -11,6 +11,9 @@
11 11
	<!-- 刷新验证码 -->
12 12
	<action name="SceneBean.refreshVerifyCode" class="com.ai.server.bean.SceneBean" method="refreshVerifyCode" verify="false"></action>
13 13
	
14
	<action name="SceneBean.uniqueLogin" class="com.ai.server.bean.SceneBean" method="uniqueLogin" verify="false"  encrypt="false"></action>
15
	<action name="SceneBean.checkSessionAvailable" class="com.ai.server.bean.SceneBean" method="checkSessionAvailable" verify="false"  encrypt="false"></action>
16
	
14 17
	<!-- 数据请求场景***************测试您的人品 -->
15 18
	<action name="SceneBean.dataRequestScene" class="com.ai.server.bean.SceneBean" method="dataRequestScene" verify="false"></action>
16 19
	<!-- 页面跳转(调用数据接口)场景***************脑筋急转弯 -->

+ 2 - 0
display-server/src/main/resources/server-page.xml

@ -133,6 +133,8 @@
133 133
	<action name="SceneBean_DemoDetail" template="template/webapp/more/scene/demo/DemoDetail.html"></action>
134 134
	<!-- 登录场景 -->
135 135
	<action name="SceneBean_login_init" template="template/webapp/more/scene/Login.html"></action>
136
	<!-- 唯一设备登录场景 -->
137
	<action name="UniqueEquipmentLogin" template="template/webapp/more/scene/UniqueEquipmentLogin.html"></action>
136 138
	<!-- 缓存使用场景 -->
137 139
	<action name="Cache" template="template/webapp/more/scene/Cache.html"></action>
138 140
	<action name="MemoryCache" template="template/webapp/more/scene/MemoryCache.html"></action>

+ 45 - 0
display-server/src/main/webapp/biz/js/more/scene/UniqueEquipmentLogin.js

@ -0,0 +1,45 @@
1
require(["wmTabbar","common","mobile","oInput","util"], function(WmTabbar,Common,Mobile,oInput) {
2

3
	
4
	// 登录
5
	$("#sceneLoginBtn").tap(function(){
6
		var params = new Wade.DataMap();
7
		params.put("ACCOUNT", $("#username").val());
8
		params.put("USER_PASSWORD", $("#password").val());
9
		
10
		// 输入的参数校验
11
		var messages = oInput.check();
12
		if(messages && messages.getMessage()) {
13
			alert(messages.getMessage());
14
			return;
15
		}
16
		
17
		// 将前台输入的参数传至后台校验
18
		Common.callSvc("SceneBean.uniqueLogin",params,function(result){
19
			result = typeof(result) == "string" ? new Wade.DataMap(result) : result;
20
			
21
			if(result.get("state")=="login_userpassword_error"){
22
				alert("用户名密码错误");
23
			}else{
24
				Common.put("ACCOUNT", result.get("ACCOUNT"));
25
				Common.put("SESSION_ID", result.get("SESSION_ID"));
26
				alert("亲爱的【"+result.get("ACCOUNT")+"】用户,登陆成功");
27
			}
28
		});
29
	});
30
	
31
	// 校验
32
	$("#checkState").tap(function(){
33
		var params = new Wade.DataMap();
34
		params.put("ACCOUNT", $("#username").val());
35
		Common.callSvc("SceneBean.checkSessionAvailable", params, function(result){
36
			result = typeof(result) == "string" ? new Wade.DataMap(result) : result;
37
			if(result.get("sessionAvailable")=="true"){
38
				alert("登陆状态有效!");
39
			}else{
40
				alert("登陆状态无效!");
41
			}
42
		});
43
	});
44
	
45
});

+ 8 - 0
display-server/src/main/webapp/template/webapp/more/scene/Scene.html

@ -37,6 +37,14 @@
37 37
					</div>
38 38
				</div>
39 39
			</li>
40
			<li action="UniqueEquipmentLogin">
41
				<div class="content">
42
					<div class="main">
43
						<div class="title">唯一设备登陆</div>
44
						<div class="info">一个ACCOUNT账号只能登陆一台设备</div>
45
					</div>
46
				</div>
47
			</li>
40 48
			<li action="Cache">
41 49
				<div class="content">
42 50
					<div class="main">

+ 98 - 0
display-server/src/main/webapp/template/webapp/more/scene/UniqueEquipmentLogin.html

@ -0,0 +1,98 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta charset="utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>唯一设备登陆</title>
7
	{%>template/common/Head.html%}
8
	<script type="text/javascript" src="biz/js/more/scene/UniqueEquipmentLogin.js"></script>
9
	
10
<style>
11
.ui-input {
12
	padding: 6px 9px;
13
	line-height: 0.22rem;
14
    height: 0.4rem;
15
	width: 3rem;
16
	border: 1px solid #BBBBBB;
17
	font-size: 0.22rem;
18
    color: #777;
19
    background: transparent;
20
    font-size: 0.22rem;
21
}
22
.reg_form {
23
	background-color: #fff;
24
	font-size: 0.22rem;
25
	padding-top: 0.12rem;
26
	box-shadow: 0 0.02rem 0 rgba(0,0,0,0.1);
27
    line-height: 1;
28
    border: 1px solid #ccc;
29
    overflow: hidden;
30
    background: #fff;
31
}
32
.reg_form .reg_table {
33
}
34
.reg_form .reg_table td {
35
	padding: 0 0 8px 0;
36
	height: 32px;
37
}
38
.reg_form .reg_table td label.des {
39
	text-align: right;
40
	display: table-cell;
41
    width: 1.5rem;
42
    padding: 0.16rem;
43
    line-height: 0.28rem;
44
}
45
.reg_form .reg_table .J_ver-wrap .ui-input {
46
	width: 2rem;
47
}
48
.verifyImg {
49
	width: 1rem;
50
	height: 0.4rem;
51
}
52
#loginResult span {
53
	line-height: 0.4rem;
54
    height: 0.4rem;
55
}
56
</style>
57
</head>
58
<body>
59
	<div class="c_navBar">
60
		<div class="left">
61
			<div class="back">
62
				<span class="e_ico-back"></span>
63
				<span class="text">登陆</span>
64
			</div>
65
		</div>
66
	</div>
67
	
68
	<div class="m_content m_content-nofooter" id="content">
69
		<form class="reg_form">
70
			<table class="reg_table" cellpadding="0" cellspacing="0" border="0" width="100%" id="loginForm">
71
				<tbody>
72
					<tr>
73
						<td width="30%"><label class="des">用户名:</label></td>
74
						<td><input value="" type="text" id="username" name="username" class="ui-input ui-nt" maxlength="20" require="true" title="用户名" /></td>
75
					</tr>
76
					<tr>
77
						<td><label class="des">密码:</label></td>
78
						<td><input value="" type="password" id="password" name="password" class="ui-input" maxlength="50" require="true" title="密码" /></td>
79
					</tr>
80
					<tr>
81
						<td>&nbsp;</td>
82
						<td>
83
							<button class="e_button-ok" id="sceneLoginBtn" onclick="javascript:return false;">唯一设备登录</button>
84
						</td>
85
					</tr>
86
					<tr>
87
						<td>&nbsp;</td>
88
						<td>
89
							<button class="e_button-ok" id="checkState" onclick="javascript:return false;">校验登陆状态</button>
90
						</td>
91
					</tr>
92
				</tbody>
93
			</table>
94
			
95
		</form>
96
	</div>
97
</body>
98
</html>