非功能性需求文档

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、密码输错6次锁定用户。

首先在用户表里添加一个字段来记录输错密码的次数,当用户登录时,若输错一次密码,就把输错次数加1,直到输错6次后再登录则提示用户已锁定,此时必须联系系统管理员重置此用户密码,并把输错次数置0,才能再次登录。实现代码如下:

public String usrCheck(Map paramMap)

{

String backStr = "";

String userId = (String) paramMap.get("userId");

String password = (String) paramMap.get("password");

MaUser maUser = (MaUser) commonDAO.getObj(MaUser.class,

userId.trim());

if (maUser == null)

{

return"userNotExist";

}

else

{

int errorTimes = maUser.getErrorTimes() == null ? 0 : new

Integer(maUser.getErrorTimes().toString());

if (errorTimes == 6)

{

return"error6";

}

else

{

if(Base64.Base64Encode(password).equals(maUser.getPasswd()) || password.equals(maUser.getPasswd()))

{

maUser.setErrorTimes(new Integer(0));

commonDAO.updateObj(maUser);

backStr = maUser.getUserName() + "@" +

maUser.getUserType();

}

else

{

maUser.setErrorTimes(new Integer(errorTimes + 1));

commonDAO.updateObj(maUser);

return"wrongPwd";

}

}

}

return backStr;

}

2、同一用户无法在两个或两个以上不同PC登录。

实现方法:

用户登录时,会创建一个session,用于保存用户信息,将所有用户登录时的session值与ID存入ServletContext中。

1. 登录:

先从ServletContext中取出存放用户登录的session 相关信息,检查这个列表,如果已经存在相同的登录信息,则说明用户已经登录。

2.监听:

实现SessionListener类,当session失效的时候,从ServletContext中移除相应记录。

登陆部分:

ServletContext context = getSession().getServletContext();

HashMap s_map = (HashMap) context.getAttribute("session_MAP");

if (s_map == null)

{

s_map = new HashMap();

}

Iterator iter = s_map.entrySet().iterator();

boolean login = false;

while (iter.hasNext())

{

Map.Entry entry = (Map.Entry) iter.next();

if (entry.getKey().toString().equals(user.getUserId())

&& !entry.getValue().toString().equals(getSession().getId())) {

login = true;

break;

}

}

if (login)

{

log.warn("用户:" + userId.trim() + " 登陆失败,该用户已在其它地方登陆");

outJsonString(jsonBackStrHelper("登陆失败,该用户已在其它地方登陆", "false"));

}

else

{

s_map.put(user.getUserId(), getSession().getId());

context.setAttribute("session_MAP", s_map);

getSession().setAttribute("user", user);

getSession().setAttribute("userId", user.getUserId());

("用户:" + userId.trim() + " 登录系统成功");

outJsonString(jsonBackStrHelper("", "true"));

}

监听部分:

public class SessionListener implements HttpSessionListener

{

public void sessionCreated(HttpSessionEvent arg0)

{

}

public void sessionDestroyed(HttpSessionEvent arg0)

{

HttpSession session = arg0.getSession();

ServletContext context = session.getServletContext();

HashMap s_map = (HashMap) context.getAttribute("session_MAP");

if (s_map == null)

{

s_map = new HashMap();

}

s_map.remove(session.getAttribute("userId"));

Iterator iter = s_map.entrySet().iterator();

while (iter.hasNext())

{

Map.Entry entry = (Map.Entry) iter.next();

if (entry.getValue().toString().equals(session.getId()))

{

s_map.remove(entry.getKey().toString());

}

}

context.setAttribute("session_MAP", s_map);

}

}

用户注销时只需调用getSession().invalidate()方法即可。

页面关闭时,也需要注销用户。

function forceLogout()

{

//判断点击关闭按钮、任务栏右击关闭、Alt+F4、Ctrl+W

if(((event.clientX+20)>(document.body.clientWidth-20)&&

event.clientY<0)|| event.clientY>document.body.clientHeight ||

event.altKey || event.ctrlKey)

{

Ext.Ajax.request({

url :'loginAction_doLogout.action',

相关文档
最新文档