`
zjxs_sky100
  • 浏览: 28403 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Session处理同账号管理

 
阅读更多
首先使用HttpSessionAttributeListener监听session的属性添加
HttpSessionListener监听session的创建和销毁
session的invalidate方法 会删除属性同时触发attributeRemoved方法
监听器代码如下:
public class BindingListener implements HttpSessionListener,
HttpSessionAttributeListener {

private static List<LineUser> login_users = null;
private final int LIMIT_NUMS = 100;


static {
if (login_users == null) {
login_users = new ArrayList<LineUser>();
}

login_users = Collections.synchronizedList(login_users);
}

public void sessionCreated(HttpSessionEvent arg0) {
System.out.println(arg0.getSession().getId()
   + "session 创建时间:" + new Date());
}

public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println(arg0.getSession().getId()
   + "session 销毁时间:" + new Date());

}

public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("属性发生添加......");
String attr_name = arg0.getName();
String attr_value = (String)arg0.getValue();
int size = login_users.size();
LineUser user = null;
boolean flag = true;
String content = null;

if (Constant.USER_NAME.equals(attr_name)) {

for (int i = 0; i < size; i++) {
user = login_users.get(i);

if (user.getUserName().equals(attr_value)) {

// login_users.remove(user);
// user.getSession().invalidate();
// System.out.println(user.getSessionId() + " 失效......");

content = Constant.LOGIN_HAVE;
flag = false;

}
}

if (flag) {

if ((size + 1) < LIMIT_NUMS ) {

user = new LineUser();
user.setSession(arg0.getSession());
user.setSessionId(user.getSession().getId());
user.setUserName(attr_value);
login_users.add(user);
content = Constant.LOGIN_OK;
} else
content = Constant.LOGIN_LIMIT;
}

arg0.getSession().setAttribute(Constant.LOGIN_FLAG, content);

}

}

public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("属性发生删除......");
String attr_name = arg0.getName();
String attr_value = (String)arg0.getValue();
int size = login_users.size();
LineUser user = null;

if (Constant.USER_NAME.equals(attr_name)) {

for (int i = 0; i < size; i++) {

user = login_users.get(i);
if (user.getUserName().equals(attr_value)) {

login_users.remove(user);
}

}
}

}

public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("属性发生替换......");
String attr_name = arg0.getName();
String attr_value = (String)arg0.getValue();
int size = login_users.size();
LineUser user = null;

if (Constant.USER_NAME.equals(attr_name)) {

for (int i = 0; i < size; i++) {

user = login_users.get(i);

if (user.getUserName().equals(attr_value)
&& !user.getSessionId().equals(arg0.getSession().getId())) {

user.getSession().invalidate();
System.out.println(user.getSessionId() + " 已经失效......");

} else if (user.getSessionId().equals(arg0.getSession().getId())) {

user.setUserName(attr_value);
}

}
}

}

}

servlet实现如下:
public class LoginServlet extends HttpServlet {

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

String name = req.getParameter("name");
String password = req.getParameter("password");

System.out.println("现在登录用户:" + name);

HttpSession session = req.getSession(true);
session.setAttribute(Constant.USER_NAME, name);

String content = (String)session.getAttribute(Constant.LOGIN_FLAG);
if (Constant.LOGIN_LIMIT.equals(content))
System.out.println("登录人数已经受限制");
else if (Constant.LOGIN_HAVE.equals(content))
System.out.println("账号已经登录");
else if (Constant.LOGIN_OK.equals(content))
System.out.println("登录成功");

req.getRequestDispatcher("/index.jsp").forward(req,resp);
}


}

申明:次例子比较浅陋,只是个人学习笔录。
分享到:
评论

相关推荐

    Javaweb仓库管理系统项目源码2.zip

    该项目是一个基于Javaweb的仓库管理系统,实现了仓库的基本管理功能。...页面简洁美观,业务流程处理完整,是一套简单但实用的仓库管理系统。 总之,该Javaweb仓库管理系统项目实现了对仓库和货物的基本管理功能,包括用户

    诚一智能办公管理系统 v1.0.zip

    独创的用户登录机制保持用户不同地点的安全登录,对各种不同浏览方式的识别并给予不同的安全防护和处理,对全局运行日志的把握和管理让您随时掌握论坛的运行情况。 4、无需独立服务器,有个虚拟空间就可以快速建立...

    基于主流框架(Spring、Redis、Jquery、Mybatis、EasyUi等)的通用后台管理系统,适配任何前台系统

    - 终端登录限制 ,自动下线同类型终端异地账号 , 强制某终端用户下线 ,禁用启动账户 . - ip拦截 - 数据字典: 查询自动走缓存, 拒绝硬编码.... - 请求日志,开发环境错误日志输出,方便分析和调试 . - 统一异常处理,json...

    万能后台管理模板javaweb

    3. 菜单管理:无限级别自定义菜单,自定义菜单图标,业务菜单和系统菜单分离,菜单状态显示隐藏(递归处理) 4. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等 5. 组织机构:无限级别,公司or部门管理 ...

    智能办公OA系统正版企业美化版办公自动化系统程序源码

    独创的用户登录机制保持用户不同地点的安全登录,对各种不同浏览方式的识别并给予不同的安全防护和处理,对全局运行日志的把握和管理让您随时掌握论坛的运行情况。 4、无需独立服务器,有个虚拟空间就可以快速建立...

    超市管理系统

    超市管理系统: 1.数据库设计: smbms_user 超市的工作人员 每个工作人员都有角色 smbms_role 人员的角色 3种: 系统管理员: 经理 : 普通员工: smbms_bill 超市账单 账单属于某个供应商 smbms_...

    JSP实现留言板系统

    (实现提示:将退出请求提交给处理退出的Servlet,在该Servlet中将session失效,再将页面重定向到登录页面。) (2) 留言管理:可以查看所有的留言,可以增加留言(即回复留言)、修改留言、删除留言。

    小程序登录态管理的方法示例

    在web项目中,我们通常使用session来管理这一过程。 客户端首次访问请求的时候,服务端返回一个sessionId作为cookie给客户端,往后客户端每次请求都带上这个cookie与服务端进行通信,当执行完登陆操作以后,服务端将...

    积分管理系统java源码-ERP-ssm:这是一个SSM(Spring+SpringMVC+Mybatis)+jQueryEasyUI开发的E

    积分管理系统java源码 ERP-ssm 这是一个生产管理ERP系统。依托科技计划重点项目“制造装备物联及生产管理系统研发”,主要包括:计划进度、设备管理、Craft.io监控、物料监控、人员监控、质量监控...登录可使用账号:22

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 mysql版本_spring3.0

    加入安全框架 shiro (登录授权)(session管理) 11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名) 12.app接口(支持与其它语言数据交互) 12.极光推送 (推送给APP...

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 oracle版本_spring3.0

    加入安全框架 shiro (登录授权)(session管理) 11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名) 12.app接口(支持与其它语言数据交互) 12.极光推送 (推送给APP...

    优索学生成绩管理系统-.net

    4、Session和Cookies全部迁移到新的类库中进行处理,方便进行转换到Linux; 5、Mappath和ULR编码方式全部迁移;HttpUtility.UrlEncode 6、NPOI升级到2.5.1; 7、引入新的操作图片的库;ZKWeb.System.Drawing 8、系统...

    银行卡联网联合技术规范

    7.2.3 双长度DES过程密钥(Session Key)分散算法 20 7.2.4 计算ARQC 21 7.2.5 计算ARPC 22 8. 相关报文域说明 22 8.1 域48 22 8.1.1 变量属性 22 8.1.2 域描述 22 8.2 域52 22 8.2.1 变量属性 23...

    百度地图毕业设计源码-FileManage:大四期间9月到11月写的毕业系统,仿照百度文库设计的,融合了session共享,nginx负载均衡

    大四期间9月到11月写的毕业系统,仿照百度文库设计的,融合了session共享,nginx负载均衡,lucene全文检索,敏感词过滤算法,office文件转pdf并提供免下载在线预览功能,登录邮件通知等功能。页面都是趴的51CTO网站...

    基于springboot+mybatis实现的外卖订餐系统源码+项目说明(毕设).zip

    后台管理系统针对管理员,功能包括管理员登陆、管理员退出、添加菜品、查询菜品、修改菜品、删除菜品、订单处理、添加用户、查询用户、删除用户。 需求了解完之后,接下来设计系统,首先分配出4个服务提供者,...

    乐彼网店源码(56770 Eshop) v10.4.3 繁体中文版.rar

    V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...

    乐彼网店源码(56770 Eshop) v10.4.3 简体中文版.rar

    V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...

    乐彼网店源码(56770 EShop) v10.4.3 日文版.rar

    V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...

Global site tag (gtag.js) - Google Analytics