- 浏览: 1112685 次
文章分类
- 全部博客 (379)
- S2SH (16)
- stuts2 (0)
- java语言 (81)
- JSP (17)
- <html>元素 (11)
- javaweb (4)
- web容器 (3)
- ext (23)
- javaScript (48)
- ant (1)
- liferay (1)
- sql (9)
- css (42)
- 浏览器设置 (3)
- office_world (1)
- eclipse (4)
- 其它 (28)
- 操作系统 (5)
- android (6)
- Struts2 (11)
- RegEx (3)
- mysql (5)
- BigDATA (1)
- Node.js (1)
- Algorithm (10)
- Apache Spark (1)
- 数据库 (5)
- linux (2)
- git (1)
- Adobe (3)
- java语言,WebSocket (1)
- Maven (3)
- SHELL (1)
- XML (2)
- 数学 (2)
- Python (2)
- Java_mysql (1)
- ReactJS (6)
- 养生 (4)
- Docker (1)
- Protocols (3)
- java8 (2)
- 书籍 (1)
- Gradle (2)
- AngularJS (5)
- SpringMVC (2)
- SOAP (1)
- BootstrapCSS (1)
- HTTP协议 (1)
- OAuth2 (1)
最新评论
-
Lixh1986:
Java并发编程:自己动手写一把可重入锁https://blo ...
Java之多线程之Lock与Condition -
Lixh1986:
http://win.51apps.com.cn/https: ...
temp -
ztwsl:
不错,支持很好
HttpServletRequest和ServletRequest的区别 -
guodongkai:
谢谢您能将知识精华汇编总结,让初学者们从原理中学会和提高。
javaScript之function定义 -
kangwen23:
谢谢了,顶顶
struts2中的ValueStack学习
单用户登录是系统中数据一直性的解决方案之一。
问题背景:
试想,如果同时有两个用户使用一个账号登录系统,
他们两个人需要对一批文章进行编辑。
都已经把同一篇文章读取到了浏览器中各自进行编辑后提交,
那么就会出现该文章只会保存一个人提交的结果。
先提交的那个人的将会被覆盖掉。
核心思想:
背景:由于每次请求的 sessionId 都不一样。
确保:每个用户名只能对应一个 session
方法:
在全局变量中维护一个 session 列表。
如果相同的用户名,出现不一样的 sessionId,
说明该用户进行了第二次登录,
则使原来存在的 session 失效(移除 session )。
页面可以加轮询次数(时间)控制,
无需等到用户下一次手动提交请求。
1、第一次登陆成功
说明:
这里不用把整个session放到全局变量中,
可以只放一个 seesionId 即可。
2、拦截器拦截每一个请求路径,判断用户是否已经在别处登录
3、前台ajax轮询用户当前状态
4、清除当前session信息
5、监听器
-
问题背景:
试想,如果同时有两个用户使用一个账号登录系统,
他们两个人需要对一批文章进行编辑。
都已经把同一篇文章读取到了浏览器中各自进行编辑后提交,
那么就会出现该文章只会保存一个人提交的结果。
先提交的那个人的将会被覆盖掉。
核心思想:
背景:由于每次请求的 sessionId 都不一样。
确保:每个用户名只能对应一个 session
方法:
在全局变量中维护一个 session 列表。
如果相同的用户名,出现不一样的 sessionId,
说明该用户进行了第二次登录,
则使原来存在的 session 失效(移除 session )。
页面可以加轮询次数(时间)控制,
无需等到用户下一次手动提交请求。
1、第一次登陆成功
String userIdDecode = "登陆名"; ServletContext context=null; context = this.getSession().getServletContext(); HttpSession session = this.getSession(); Map<String,HttpSession> usersMap = (Map<String, HttpSession>) context.getAttribute("usersMap"); //第一个用户登录时 if(usersMap == null){ usersMap = new HashMap<String,HttpSession>(); usersMap.put(userIdDecode, session); context.setAttribute("usersMap", usersMap); //将用户保存到ServletContext对象中 //非第一个用户登录 }else{ if(usersMap.containsKey(userIdDecode)){ logger.info("第二次登陆,remove掉"+userIdDecode); usersMap.remove(userIdDecode); } logger.info("添加当前用户到map"+userIdDecode); usersMap.put(userIdDecode, session); } this.setSessionValue("user", userIdDecode);
说明:
这里不用把整个session放到全局变量中,
可以只放一个 seesionId 即可。
2、拦截器拦截每一个请求路径,判断用户是否已经在别处登录
//获取用户信息 HttpSession session = this.getSession(); String user = (String)session.getAttribute("user"); System.out.println("当前登陆用户:"+user+"当前用户的sessionId"+session.getId()); Map<String,HttpSession> usersMap = (Map<String, HttpSession>) session.getServletContext().getAttribute("users"); if(null != usersMap){ if(null == user){ result = ""; return null; } if(usersMap.containsKey(user)){ if(session.getId().equals(usersMap.get(user).getId())) result = "true"; else result = "false"; }else { if(null==usersMap.get(user)) result = "true"; else result = "false"; } }else{ result = ""; } try { ServletActionContext.getResponse().getWriter().print(result); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
3、前台ajax轮询用户当前状态
//如果是在首页结束轮询 var countTimeOut = 0; //轮询当前用户 var t2 = window.setInterval("loadXMLDoc()",1000); function loadXMLDoc() { countTimeOut = countTimeOut+1; if(countTimeOut == 1800){ $.ajax({ type:"post", url:"cleanSession", dataType : "text", error:function(){ window.location.href="http://toIndex.action"; } }); } $.ajax({ type:"post", url:"sessionLive", dataType : "text", success:function(data){check(data)}, error:function(){ window.location.href="http://toIndex.action"; } }); } function check(result){ if(result=="true"){ }else{ if(result=="false"){ alert("您已经在别处登陆"); $.ajax({ type:"post", url:"cleanSession", dataType : "text", error:function(){ window.location.href="http://toIndex.action"; } }); window.location.href="http://toIndex.action"; }else{ clearInterval(t2); } } } //轮询当前用户结束
4、清除当前session信息
//获取用户信息 String user = (String)this.getSession().getAttribute("user"); Map<String,HttpSession> usersMap = new HashMap<String, HttpSession>(); HttpSession session = this.getSession(); usersMap = (Map<String, HttpSession>)session.getServletContext().getAttribute("users"); if(null != usersMap){ if(usersMap.containsKey(user)){ if(session.getId().equals(usersMap.get(user).getId())) { usersMap.remove(user); } }} this.getSession().invalidate();
5、监听器
application = event.getSession().getServletContext(); Map<String,HttpSession> usersMap = new HashMap<String, HttpSession>(); HttpSession session = event.getSession(); String user = (String)session.getAttribute("user"); usersMap = (Map<String, HttpSession>)application.getAttribute("users"); if(null != usersMap){ if(usersMap.containsKey(user)){ if(session.getId().equals(usersMap.get(user).getId())){ usersMap.remove(user); } } } //将session设置成无效 event.getSession().invalidate(); System.out.println("一个Session被销毁了!"+user);
-
发表评论
-
java 将文件夹所有的文件合并到指定的文件夹下
2020-06-30 19:17 1064场景:将文件夹所有的文件合并到指定的文件夹下 另外:如果想效 ... -
多线程-线程池的四种创建方式
2020-04-01 18:38 488多线程-线程池的四种创建方式 https://blog.cs ... -
Java基础之:nio
2019-11-13 15:38 484一、理论讲解: 史上最强Java NIO入门:担心从入门到放弃 ... -
Java 分布式之:RPC 基本概念
2019-11-13 15:07 462转载: https://www.jianshu.com/p/ ... -
Java之 volatile 关键字原理详解
2019-11-07 15:36 548一、什么是 volatile ? ... -
POI实现excell批注背景图片(仿html浮窗显示图片)
2019-10-21 08:17 693POI实现excell批注背景图片(仿html浮窗显示图片) ... -
Java之设计模式之 Observer 观察者
2019-07-04 17:21 1070观察者设计模式 Java 已经实现了该模式,并且提供了使用类 ... -
HashMap, LinkedHashMap and TreeMap
2019-03-01 11:04 680https://stackoverflow.com/a/177 ... -
Java lib 操作 excel 插入图片
2019-01-19 12:46 881https://poi.apache.org/componen ... -
数据库连接池C3P0
2018-05-29 16:50 897一、名字的由来 很多 ... -
Java8之集合(Collection)遍历 forEach()、stream()
2018-05-29 14:39 20751package java8.collections; ... -
Junit Vs main on "java.util.concurrent.Executors"
2017-11-10 16:44 816Same code with different result ... -
Java之大数据学习路线
2017-11-03 10:08 5722三个月大数据研发学习 ... -
Java中创建对象的5种方式
2017-10-26 14:21 842一、Java之5种创建对象的方式 ————————————— ... -
Log4j和Slf4j的比较
2017-06-23 12:41 1411一直搞不清 Log4j 和 SLF4j 的关系。今天才若有所 ... -
Java之Java7新特性之try资源句式
2017-04-20 14:58 5385Java之Java7新特性之try资源句式 一、【try资源 ... -
Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future
2017-03-04 21:27 3834一、如何使用 ExecutorService.submit() ... -
Java之 java.util.concurrent 包之Executor与ExecutorService
2017-03-04 21:18 2704一、问题: execute() 与 submit() 的区别? ... -
Java之多线程之线程池之线程重复使用
2017-02-04 13:33 5568一、问题背景 在使用多线程时,如果要开启一个任务,则就需要新 ... -
Java之语法之方法调用之地址传值之空对象(null)
2017-01-26 14:05 3323一、问题: public void test ...
相关推荐
2. 用户登录:用户输入用户名和密码,然后系统将用户信息从数据库中检索出来,并进行身份验证。 JavaEE技术 该系统使用了JavaEE技术来实现注册登录功能。JavaEE是一个基于Java的企业级开发平台,提供了许多有用的...
在JavaEE开发中,拦截器...总之,`JavaEE 拦截器用户登录案例源代码`这个主题涉及到如何使用拦截器进行用户登录验证,通过学习这个案例,开发者可以更好地理解拦截器的原理和应用,提升Web应用的安全性和用户体验。
学习并实践这个“JavaEE用户登录注册代码”项目,可以帮助初学者掌握Web应用开发的基本流程,理解前后端交互,以及如何在实际环境中应用JavaEE的相关技术。同时,也可以锻炼到数据库操作、安全编程以及错误处理等...
综上所述,这个项目提供了一个基础的JavaEE Web应用实践,通过Tomcat服务器和MySQL数据库,展示了如何实现用户登录的基本功能,对于初学者来说,这是一个很好的起点,可以让他们理解JavaEE环境的搭建、数据库连接、...
在JavaEE企业级开发中,用户登录功能是任何应用程序的核心组成部分,它确保只有授权的用户能够访问受保护的资源。本教程将深入探讨9.5版本中的用户登录实现,涵盖关键概念和技术,包括身份验证、授权、会话管理以及...
JavaEE Spring MyBatis框架(登录)JavaEE Spring MyBatis框架(登录)JavaEE Spring MyBatis框架(登录)JavaEE Spring MyBatis框架(登录)JavaEE Spring MyBatis框架(登录)JavaEE Spring MyBatis框架(登录)JavaEE Spring ...
以上就是“JavaEE MVC模式实现登录注册和用户增删改”所涵盖的主要知识点,这些技术与实践对于理解JavaEE应用开发有着重要的意义。通过这个项目,开发者不仅可以掌握基本的Web开发技能,还能深入理解MVC模式以及如何...
在这个项目中,JSP可能会包含用户登录表单、个人信息展示等页面。 - **jQuery/AngularJS/Vue.js**:这些是常见的JavaScript库或框架,用于提升前端开发效率,实现更复杂的交互效果。例如,AngularJS可以用于双向...
登录成功后,服务器会创建一个会话(session),保存用户的登录状态,并通过cookie在客户端保持会话。当用户请求其他页面时,服务器检查session来确认用户是否已登录。 8. **错误处理与页面重定向** 对于无效的...
在本JavaEE大作业中,我们关注的是一个基础的登录系统的设计与实现。这个系统采用的是经典的分层架构,这是企业级应用开发中常见的模式,它有助于代码的组织和维护,提高了系统的可扩展性和可重用性。以下是该登录...
【标题】"DLOG4J JAVAEE多用户博客"是一个基于JAVA技术的Web应用程序,它采用了经典的SSH(Spring、Struts、Hibernate)架构,旨在实现一个支持多用户的博客平台。这个项目不仅提供了用户发布、阅读和评论博客文章的...
如果匹配度达到预设阈值,则认为识别成功,允许用户登录;否则,拒绝登录请求。 7. **安全性考虑**:为了保护用户隐私,存储的面部特征应该进行加密处理,并且不应存储原始图像。此外,定期更新API密钥,限制API...
用的是MySQL数据库,自己建立一张user表就好了,只做了三列,ID,自增长,int;username,varchar;password,varchar;其他的日期什么的自己添加就好了,不是特别难,所有对数据库的操作都在servlet中
这种权限控制通常通过session或cookie实现,根据用户登录时的角色分配不同的操作权限。 **5. 数据库连接与操作** 系统可能使用JDBC(Java Database Connectivity)来连接和操作数据库,如MySQL。通过...
SSM框架整合简化了JavaEE应用的开发流程,通过Spring管理依赖,SpringMVC处理HTTP请求,MyBatis负责数据库操作。本实验通过创建实体类、控制层和业务逻辑,实现了后台管理系统的登录和院校管理功能,展示了SSM框架...
本资源摘要信息主要涉及JavaEE期末答辩总结,涵盖了JavaEE项目中的用户登录验证、登录功能的实现流程、持久对象层、数据访问层、业务逻辑层、Web表现层等内容。 一、用户登录验证 用户登录验证是JavaEE项目中的一...
JavaEE Spring Struts2 Hibernate SSH2框架(登录例子) JavaEE Spring Struts2 Hibernate SSH2框架(登录例子) JavaEE Spring Struts2 Hibernate SSH2框架(登录例子) JavaEE Spring Struts2 Hibernate SSH2框架(登录...
用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表 3.使用JdbcTemplate技术封装JDBC 4.登录成功跳转到...
在大作业中,学生可能需要编写Servlet来处理用户请求,如登录验证、数据处理等。 3. **JSP(JavaServer Pages)**:JSP是一种动态网页技术,允许在HTML代码中嵌入Java代码。在项目中,JSP通常用于创建视图层,展示...
查询(Read)操作通常用于显示用户信息,这可能在用户登录后自动进行,以便展示个人资料。 为了实现这些功能,开发者需要熟悉JSP、Servlet、JDBC以及相关的HTML和CSS知识。JSP可以用来创建动态网页,直接嵌入Java...