`

用户登录和退出日志

    博客分类:
  • java
阅读更多

  当用户登录系统时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。

  我们利用HttpSessionBindingListener接口来完成记录登录和退出日志的功能,该接口中定义了两个方法:

  ·valueBound(HttpSessionBindingEvent event)

  ·valueUnbound(HttpSessionBindingEvent event)

  如果一个类实现了HttpSessionBindingListener接口,当对象通过session.setAttribute()被绑定到Session中时,则对象的接口方法valueBound()被自动调用,当对象从session中移出时(通过调用session.invalidate()、session.removeAttribute()或session自动过期时),valueUnbound()方法将被自动调用。

  下面我们使User.java类实现HttpSessionBindingListener接口,调整后的代码如下所示:

  代码清单 18 实现了HttpSessionBindingListener的User.java




1. package bookstore;
2. import javax.servlet.http.HttpSessionBindingListener;
3. import javax.servlet.http.HttpSessionBindingEvent;
4. import java.sql.*;
5. import java.text.SimpleDate表单at;
6. import java.util.Date;
7.
8. public class User implements HttpSessionBindingListener
9. {
10.  …
11.  private String loginDatetime;//用户登录时间
12.  …
13.  public void valueBound(HttpSessionBindingEvent event)
14.  {
15.   Connection conn = null;
16.   String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
17.       " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
18.   try
19.   {
20.    conn = DBConnection.getConnection();
21.    PreparedStatement pStat = conn.prepareStatement(sqlStr);
22.    loginDatetime = getCurrDatetimeStr(); //当前时间串
23.    pStat.setString(1, userId);
24.    pStat.setString(2, loginDatetime);
25.    pStat.executeUpdate();
26.
27.   } catch (SQLException e)
28.   {
29.    throw new RuntimeException(
30.     "用户登陆日志写入出错");
31.   } finally
32.  {
33.  try
34.  {
35.   if (conn != null)
36.   {
37.    conn.close();
38.   }
39.  } catch (SQLException ex)
40.  {
41.   ex.printStackTrace();
42.  }
43.  }
44. }
45.
46. public void valueUnbound(HttpSessionBindingEvent event)
47. {
48.  Connection conn = null;
49.  String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
50.      " where USER_ID=? and DT_LOGIN = ?";
51.  try
52.  {
53.   conn = DBConnection.getConnection();
54.   PreparedStatement pStat = conn.prepareStatement(sqlStr);
55.   pStat.setString(1, getCurrDatetimeStr());
56.   pStat.setString(2, userId);
57.   pStat.setString(3, loginDatetime);
58.   pStat.executeUpdate();
59.
60.  } catch (SQLException e)
61.  {
62.   throw new RuntimeException(
63.    "用户退出日志写入出错");
64.  } finally
65.  {
66.   try
67.   {
68.    if (conn != null)
69.    {
70.     conn.close();
71.    }
72.   } catch (SQLException ex)
73.   {
74.    ex.printStackTrace();
75.   }
76.  }
77. }
78.
79. //获取当前时间字串,以yyyyMMddHHmmss格式返回,如20050505010101
80. private static String getCurrDatetimeStr()
81. {
82.  SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss");
83.  return sdf.表单at(new Date());
84. }
85. }




  valueBound()方法向T_LOGIN_LOG表插入一条登录日志,在valueUnbound()方法中更新日志表的退出时间,此外第80~84行提供了一个获取当前时间串的方法getCurrDatetimeStr(),通过该方法获取登录和退出时间点的时间字符串。

  下面通过描述用户登录系统直到退出时所经历的步骤说明程序如何记录用户的登录和退出时间的:

  1.用户通过login.jsp输入密码登录后,程序转向switch.jsp控制页面。

  2.在switch.jsp中,我们通过session.setAttribute("ses_userBean", userBean)方法将User.java类的对象userBean绑定到session中。

  3.此时userBean对象的HttpSessionBindingListener接口方法valueBound()被调用,向T_LOGIN_LOG表插入一条登录日志。

  4.switch.jsp转向welcome.jsp页面。

  5.用户点击welcome.jsp页面中的链接退出系统时,转向quit.jsp页面。

  6.quit.jsp调用session.invalidate()方法,userBean对象从session中清除。

  7.此时userBean对象的HttpSessionBindingListener接口方法valueUnbound()方法被调用,更新日志的退出时间,关闭浏览器窗口。

  HttpSessionBindingListener接口是Web容器的事件接口,实现接口的类在某个事件发生时自动被调用,Web容器有多个这样的事件接口,它们分别是:

  ·ServletContextListener 接口:Web容器启动和销毁的事件处理接口,接口中定义了两个方法。

  ·ServletContextAttributeListener接口:Web上下文属性发生更改时的事件处理接口。

  ·HttpSessionListener接口:Session创建和销毁事件的事件处理接口。

  ·HttpSessionAttributeListener接口:Session会话中属性对象更改的事件处理接口,该接口和我们在前面使用的HttpSessionBindingListener接口相似。

  此外在J2EE1.4中还提供了另外两个事件处理接口,它们是:

  ·ServletRequestListener接口:Request请求对象创建和销毁事件处理接口。

  ·ServletRequestAttributeListener接口:更改Request中属性对象时的事件处理接口。

程序部署

  在Web程序开发完成后,我们开始着手程序部署的工作,我们希望将这个Web应用程序部署到Tomcat5.0的Web应用服务器中。

  首先我们设置Web应用程序的默认首页,然后再将整个Web程序打成一个WAR档案文件包。

  1.设置默认访问的页面,双击工程窗格中的webModule节点,JBuilder在内容窗格显示如下的页面:


图 26 设置Web程序默认访问的页面

  点击Welcome files列表右边的Add…按钮,在弹出的对话框中录入login.jsp并按确定按钮,将login.jsp页面作为默认页面,这样web.xml部署描述文件中将新增以下粗体的部署信息:

  代码清单 19 Web应用程序默认页面

1. …
2. <web-app>
3. <display-name>webModule</display-name>
4. <welcome-file-list>
5. <welcome-file>login.jsp</welcome-file>
6. </welcome-file-list>
7. …
8. </web-app>

  当用户在URL中没有指定具体的访问文件名时,Web容器自动查看URI下是否有login.jsp文件,如果直接调出这个文件。

  2.在工程窗格中的资源树中右击webModule节点,Properties…->Build->在Build设置面中,将Build Web archive设置为When building project or module选项,如下图所示:


图 27 设置在Rebuild工程或Web模块时创建WAR档案文件

  3.在工程窗格中右击chapter13.jpx,在弹出的菜单中选择Rebuild编译整个工程。

  4.编译完成后,在工程根目录下将产生一个webModule.war文件。

  5.拷贝webModule.war文件至<JBuilder2005安装目录>/thirdparty/jakarta-tomcat-5.0.27/webapps目录下。

  这样就完成Web应用程序的部署了,下面我们启动Tomcat 5.0 Web应用程序服务器,并访问刚才部署的webModule.war应用程序。

  1.双击<JBuilder2005安装目录>/thirdparty/jakarta-tomcat-5.0.27/bin下的startup.bat启动Tomcat 5.0 Web应用服务器(请保证这时JBuilder中没有运行Web应用程序,以免冲突)。

  2.打开IE,键入http://localhost:8080/webModule,将正确访问到刚才部署的Web应用程序,如下图所示:


图 28 部署后login.jsp的访问效果

  Tomcat 服务器默认工作于8080端口,所以在机器名后需要添加端口号,可以通过更改Tomca位于conf目录下的server.xml配置文件可以更改这个端口号。

  由于我们的web应用程序的WAR文件名为webModule.war,web服务器启动后,会自动将WAR文件解压到webModule目录下,所以必须通过http://localhost:8080/webModule访问。此外,由于默认访问页面为login.jsp,所以没有指定具体的页面时,login.jsp页面被调用访问。

0
0
分享到:
评论

相关推荐

    判断用户非法退出的登录

    3. **事件日志**:记录用户的所有操作,包括登录、退出和任何异常情况。当用户突然消失,没有触发正常的退出事件,可以从日志中检测到。 4. **状态保存**:在用户操作过程中,定期保存用户的状态,即使用户非法退出...

    判断用户已经退出和防止用户未登录直接访问页面

    总的来说,确保用户退出检测和防止未登录访问需要结合服务器端和客户端的技术手段。正确实施这些措施能有效提升ASP.NET应用的安全性,同时提供良好的用户体验。在实际项目中,还需要考虑其他安全因素,如防止Session...

    unix系统日志系统记录的日志

    5. **/var/adm/lastlog** 和 **/var/adm/sulog** 也是两个重要的日志文件,分别记录了用户登录信息和用户通过 `su` 命令切换身份的事件。 6. **/var/adm/wtmp** 和 **/var/adm/btmp**:这两个文件分别记录了所有...

    java连接数据库及登陆模块

    接下来,我们讨论“记录用户登录和退出日志”。日志记录是系统监控和调试的重要工具。在用户登录和退出时,我们可以记录以下信息: - 用户ID - 登录时间 - 登录IP地址 - 登录状态(成功/失败) - 退出时间 这些...

    Spring Security 3多用户登录实现之十一 退出

    退出功能则允许用户安全地结束他们的会话,清除相关的会话数据,以保护用户的隐私和系统的安全性。 在Spring Security中,退出流程通常是通过调用`logout`过滤器来实现的。这个过滤器负责清理用户的会话信息,包括...

    远程桌面的连接登录日志记录

    首先,为了实现远程桌面连接的日志记录,我们需要在服务器上创建一个专门用于存储日志和监控程序的目录。例如,在C盘根目录下创建一个名为“RDP”的文件夹,该文件夹将用于存放所有的日志文件和执行批处理文件。 ##...

    linux记录用户登录操作日志.zip_linux查看登录用户

    linux记录用户登录操作日志.日志分析 每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)

    SpringMVC 拦截器 实现 登录退出功能

    在本例中,我们将讨论如何使用拦截器来实现用户登录验证以及安全退出功能。 首先,我们需要了解SpringMVC中的拦截器是如何工作的。SpringMVC的拦截器是基于Servlet的Filter机制扩展而来的,它通过`...

    处理含有登录地址第二次没退出登录就404的问题

    标题中的问题涉及到的是一个常见的Web应用安全问题,即用户在登录后没有正确退出,再次访问时直接出现404错误。这通常与身份验证和会话管理有关,具体到这个情况,可能是由于Shiro(一个Java安全框架)的配置或使用...

    WPF10分钟不操作就自动退出登录

    启动任务线程:默认10分钟不操作即注销退出 Task.Factory.StartNew(() => { while (isMonitor) { if (DateTime.Now.Subtract(GlobalUtil.LastOperateTime).TotalMinutes >= GlobalUtil.AdminTimeoutMinute) { ...

    linux日志管理,进行linux的日志管理

    `utmp`、`wtmp`和`lastlog`是日志子系统的核心部分,它们记录用户登录和退出的详细信息。`utmp`文件保存当前登录用户的状态,`wtmp`文件记录所有登录和退出的历史,而`lastlog`则保存最后一次登录的时间和主机信息。...

    用户日志留存所采用的技术手段.docx

    用户日志留存是网络安全的重要组成部分,它涉及到对用户在互联网上的活动进行记录和保存,以便在需要时进行分析、审计和安全防护。以下是对用户日志留存所采用的技术手段的详细解析: 一、访问把握和身份鉴别 这...

    Linux 操作系统日志管理全攻略

    utmp、wtmp 和 lastlog 日志文件是多数重用 UNIX 日志子系统的关键——保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件 utmp 中;登录进入和退出纪录在文件 wtmp 中;最后一次登录文件可以用 ...

    渗透测试TIPS之删除伪造Linux系统登录日志1

    在渗透测试过程中,为了隐藏入侵者的踪迹,避免被系统管理员发现,删除和伪造Linux系统的登录日志是一项关键技能。本文将深入探讨如何处理Linux中的utmp、wtmp、btmp以及lastlog这些与登录相关的二进制日志文件。 ...

    基于HttpSessionBindingListener的登陆日志

    当用户退出时,该对象将被解绑,并触发valueUnbound方法。 本例中我们使用HttpSessionBindingListener来记录登陆日志信息,并将其存储到数据库中。这是一种常见的日志记录方式,能够帮助我们追踪用户的活动记录。 ...

    javaweb 登录、注册、修改密码、退出登录

    在JavaWeb开发中,登录、注册、修改密码和退出登录是基本且至关重要的功能模块,它们构成了用户身份验证和授权的基础。以下是对这些核心功能的详细解析: **1. 登录系统** 登录系统通常由前端界面和后端处理组成。...

    java读取用户登入退出日志信息上传服务端

    综上所述,Java读取用户登录退出日志信息并上传服务端涉及到文件读写、日志解析、网络通信等多个方面,需要对Java I/O、并发编程和网络编程有深入理解。通过合理的设计和实现,可以构建出高效、稳定且易于扩展的日志...

    history保存用户操作日志,登陆时间,防止会话退出时覆盖

    对于日志文件,可以按照用户登录名和IP地址来命名,以便区分不同用户的操作日志。 7. **HISTFILE**:默认的历史文件是`~/.bash_history`,但你可以自定义为`/var/log/history/LOGNAME/USER_IP_USERIP.LOGNAME....

    第15章 告警和日志信息监控.pptx

    本章节主要介绍了大数据平台的日志和告警信息的存放位置、查看方法,以及如何根据日志和告警信息进行分析和解决常见错误日志和告警问题。 大数据平台日志信息 大数据平台日志信息是指大数据平台中记录的所有日志...

    思科设备--记录配置变更日志

    此命令会列出所有变更的索引、会话ID、执行更改的用户、登录位置以及具体的配置命令。 通过记录这些日志,网络管理员可以快速定位问题,追踪错误的源头,同时也有助于审计目的,确保网络设备的安全性和合规性。此外...

Global site tag (gtag.js) - Google Analytics