- 浏览: 28403 次
- 性别:
- 来自: 杭州
文章分类
最新评论
首先使用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);
}
}
申明:次例子比较浅陋,只是个人学习笔录。
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);
}
}
申明:次例子比较浅陋,只是个人学习笔录。
发表评论
-
aaaaaaaaaaaa
2014-08-30 09:01 0111111111111111 -
struts2与checkbox的关系
2014-03-25 15:35 580Struts2 框架对checkbox的处理 1、 对于htm ... -
doc命令之关机管理
2014-03-21 09:26 651@echo off set /p p=是否关机(1:关机 2: ... -
金字塔最短路径
2014-03-18 10:02 544class Triangle { private int[] ... -
汉诺塔递归算法
2014-03-15 10:49 526class Hanio { private int st ... -
回溯算法之八皇后
2014-03-13 13:27 561public class EightQueens { ... -
xml的基本学习
2014-03-04 15:17 7971、 XML的概念 允许开发 ... -
软件生命三大测试的概念和区别
2014-02-17 22:01 0根据不同的测试阶段,测试可以分为单元测试、集成测试、系统测试和 ... -
线程概念
2013-03-20 21:06 0线程对可共享的、可改变的状态变量进行访问,需要实现协同,否则数 ... -
KMP算法
2013-03-20 14:10 848package zl.character.compare; ... -
parseInt惹的祸
2013-03-04 17:57 754今天项目在实施的过程中,出现了让我懊恼的事情: 卡的金额读不出 ... -
Unable to retrieve metadata for procedure
2013-03-01 13:51 3838第一次用jdbc调用mysql存储过程的过程中犯了一个严重的错 ... -
JDK动态代理和CGLIB动态代理的学习
2012-10-08 17:25 0JDK动态代理是基于java.lang.reflect.Pro ... -
log4j输出spring框架的信息
2012-10-08 17:00 0log4j.logger.org.springframewor ... -
ReadWriteLock多线程下操作
2012-09-06 17:45 931ReadWriteLock是实现多线程环境下同步的一种方式。与 ... -
WIN7 BCompare 启动应用程序发生错误
2012-08-24 11:26 1027WIN7下寻找: 把C:\用户\[用户名]\AppData\S ... -
ant
2012-08-24 11:15 0当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设 ... -
spring框架后处理器的学习
2012-07-27 09:22 651spring框架对容器管理bean和容器本身提供了额外增强功能 ... -
socket简单通讯
2012-07-26 17:09 732package zl.socket.server; impo ... -
java命令执行class文件
2012-07-26 14:30 650eclipse编译出来的class文件如果带有包结构,请在命令 ...
相关推荐
该项目是一个基于Javaweb的仓库管理系统,实现了仓库的基本管理功能。...页面简洁美观,业务流程处理完整,是一套简单但实用的仓库管理系统。 总之,该Javaweb仓库管理系统项目实现了对仓库和货物的基本管理功能,包括用户
独创的用户登录机制保持用户不同地点的安全登录,对各种不同浏览方式的识别并给予不同的安全防护和处理,对全局运行日志的把握和管理让您随时掌握论坛的运行情况。 4、无需独立服务器,有个虚拟空间就可以快速建立...
- 终端登录限制 ,自动下线同类型终端异地账号 , 强制某终端用户下线 ,禁用启动账户 . - ip拦截 - 数据字典: 查询自动走缓存, 拒绝硬编码.... - 请求日志,开发环境错误日志输出,方便分析和调试 . - 统一异常处理,json...
3. 菜单管理:无限级别自定义菜单,自定义菜单图标,业务菜单和系统菜单分离,菜单状态显示隐藏(递归处理) 4. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等 5. 组织机构:无限级别,公司or部门管理 ...
独创的用户登录机制保持用户不同地点的安全登录,对各种不同浏览方式的识别并给予不同的安全防护和处理,对全局运行日志的把握和管理让您随时掌握论坛的运行情况。 4、无需独立服务器,有个虚拟空间就可以快速建立...
超市管理系统: 1.数据库设计: smbms_user 超市的工作人员 每个工作人员都有角色 smbms_role 人员的角色 3种: 系统管理员: 经理 : 普通员工: smbms_bill 超市账单 账单属于某个供应商 smbms_...
(实现提示:将退出请求提交给处理退出的Servlet,在该Servlet中将session失效,再将页面重定向到登录页面。) (2) 留言管理:可以查看所有的留言,可以增加留言(即回复留言)、修改留言、删除留言。
在web项目中,我们通常使用session来管理这一过程。 客户端首次访问请求的时候,服务端返回一个sessionId作为cookie给客户端,往后客户端每次请求都带上这个cookie与服务端进行通信,当执行完登陆操作以后,服务端将...
积分管理系统java源码 ERP-ssm 这是一个生产管理ERP系统。依托科技计划重点项目“制造装备物联及生产管理系统研发”,主要包括:计划进度、设备管理、Craft.io监控、物料监控、人员监控、质量监控...登录可使用账号:22
加入安全框架 shiro (登录授权)(session管理) 11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名) 12.app接口(支持与其它语言数据交互) 12.极光推送 (推送给APP...
加入安全框架 shiro (登录授权)(session管理) 11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名) 12.app接口(支持与其它语言数据交互) 12.极光推送 (推送给APP...
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...
大四期间9月到11月写的毕业系统,仿照百度文库设计的,融合了session共享,nginx负载均衡,lucene全文检索,敏感词过滤算法,office文件转pdf并提供免下载在线预览功能,登录邮件通知等功能。页面都是趴的51CTO网站...
后台管理系统针对管理员,功能包括管理员登陆、管理员退出、添加菜品、查询菜品、修改菜品、删除菜品、订单处理、添加用户、查询用户、删除用户。 需求了解完之后,接下来设计系统,首先分配出4个服务提供者,...
V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...
V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...
V10.4.2 to V10.4.3 升级说明 [更新]访客/会员/管理员状态COOKIES、SESSION双识别,兼容浏览器高等级隐私设置,在高等级隐私设置时客户可以流畅登录会员、购买产品及提交订单。[更新]会员账户充值模块。[修正]修正...