系统登录、登出保存日志问题

最近有个需求,系统登录进来保存用户 登录日志的信息,有做过的请指教一下。。

0

8个回答

[quote]现在要这样实现了,登录进来记录用户信息,当用户退出时 就修改记录的用户信息,我感觉这不大合理呀。要修改,我根据什么修改呀。[/quote]

只是说记录用户的登陆状态,没必要修改用户信息啊,你再重建一张用户状态表,每个用户一个状态,用户登陆退出的时候,只修改对应的状态信息,只不过多加了一个update操作而已。

0

这个就是设计一个数据库表在用户登录时把它的登录时间,ip地址,用户名等等记录到数据库中。用户登录成功后将用户的登录信息写到数据库中。做的高级点的erp软件还能把用户做了哪些操作记录下来。
大致思路:
1.根据日志设计数据库表
2.登录成功,把登录信息写到表中。
3.用户推出或者注销把用户的注销,退出信息写到表中。

如果想做一个单点登录系统,登录时检测用户是否是活跃状态,是的不让登录,那这个就是单点登录了(SSO)
关于SSO可以参考参考:
url:http://www.cnblogs.com/luiweiping002/archive/2009/10/26/1649266.html

0

给你一个简单的例子,这样好下手:

JBuilder2005实战JSP之日志和部署.用户登录和退出日志
[url]http://www.uml.org.cn/j2ee/200601135.htm[/url]

0

使用aspectJ 的aop嘛。。。
很简单

0

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

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

  ·valueBound(HttpSessionBindingEvent event)

  ·valueUnbound(HttpSessionBindingEvent event)

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

  下面我们使User.java类实现HttpSessionBindingListener接口,调整后的代码如下所示:
[code="java"]
package bookstore;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionBindingEvent;
import java.sql.*;
import java.text.SimpleDate表单at;
import java.util.Date;

public class User implements HttpSessionBindingListener
{
 …
 private String loginDatetime;//用户登录时间
 …
 public void valueBound(HttpSessionBindingEvent event)
 {
  Connection conn = null;
  String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
      " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
  try
  {
   conn = DBConnection.getConnection();
   PreparedStatement pStat = conn.prepareStatement(sqlStr);
   loginDatetime = getCurrDatetimeStr(); //当前时间串
   pStat.setString(1, userId);
   pStat.setString(2, loginDatetime);
   pStat.executeUpdate();

  } catch (SQLException e)
  {
   throw new RuntimeException(
    "用户登陆日志写入出错");
  } finally
 {
 try
 {
  if (conn != null)
  {
   conn.close();
  }
 } catch (SQLException ex)
 {
  ex.printStackTrace();
 }
 }
}

public void valueUnbound(HttpSessionBindingEvent event)
{
 Connection conn = null;
 String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
     " where USER_ID=? and DT_LOGIN = ?";
 try
 {
  conn = DBConnection.getConnection();
  PreparedStatement pStat = conn.prepareStatement(sqlStr);
  pStat.setString(1, getCurrDatetimeStr());
  pStat.setString(2, userId);
  pStat.setString(3, loginDatetime);
  pStat.executeUpdate();

 } catch (SQLException e)
 {
  throw new RuntimeException(
   "用户退出日志写入出错");
 } finally
 {
  try
  {
   if (conn != null)
   {
    conn.close();
   }
  } catch (SQLException ex)
  {
   ex.printStackTrace();
  }
 }
}

//获取当前时间字串,以yyyyMMddHHmmss格式返回,如20050505010101
private static String getCurrDatetimeStr()
{
 SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss");
 return sdf.表单at(new Date());
}
}
[/code]

  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中属性对象时的事件处理接口。

0

这个问题我觉得嘛,重要的不是 代码 重要的是思路。登录时 你要记录什么信息,你需要设计成什么样的表结构,那些信息是你关注的很重要。这些弄清了。好的系统是设计出来的,编码只是其中的一个重要的环节。很多人只注重,有现成的代码吗?很多答题人又很有意思,其实自己也没有那些经验 上网随便搜一个 粘切上 这样不好。没有帮助!
三点很重要:
1.我需要实现那些需求,功能是什么,我关注那些信息
2.我想把它设计成什么样的比较合理,设计。
3.先实现一下,看看行不行,不行在改进。敏捷开发。

在实现过程中遇到了某些技术小问题,再各个击破。不就OK了吗!

0
wge83
wge83 顶,回答很好!
接近 7 年之前 回复

[code="java"]
现在我们项目中的日志实体类有这么几个属性:操作名称、操作人、操作状态、退出状态、操作时间、退出时间,当用户登录时,就新增一条信息,记录登录人,登录时间,状态,退出时就将新增的那条记录。请问这样行的通吗?帮忙指点一下。谢谢。补充一下,系统没有单点登录,也没有用spring的aop,就是简单的记录用户登录、登出信息。
[/code]

才看到了你的回复 不好意思。

没有单点登录你这个就比较简单。你的字段中需要记录一下登录IP这样把用户登录IP记录下来比较好。其他基本信息都有了。做起来还是比较简单。仔细考虑一下你的实际情况。把表结构设计合理后。再去设计记录信息的接口和方法。

0

[quote]如果用 HttpSessionBindingListener 实现的话,那我的user类必须实现这个接口???我们项目现在采用的是struts2 sping hibernate,如果我的user类实现HttpSessionBindingListener 接口,就得在user类中重写那两个方法,而且得用jdbc 保存的日志表中?我想在action这一层 中加入日志,如何实现?[/quote]

最主要的还是session销毁时(可能有N中情况诱发,如正常退出、关闭浏览器等),如何触发写日志的操作。

登陆时,日志可以随着用户名/密码的验证通过而写入。
退出时,如何利用session销毁事件写日志,这是一个难点,不实现HttpSessionBindingListener接口的话,就不好触发session销毁,如果自己写代码判断的话,可以在后台开一个扫描器,每个很短的一段时间判断一下session的状态,这样写起来麻烦,而且写不好的话,也耗费容器性能。

建议实现一下这个接口,反正接口是可以实现多个的。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用户登陆登出日志
最近有点忙,人物比较多,累。。 ======================================= 项目需求要支持查看用户操作记录和登录的记录 操作记录已经有了 现在只需要添加登录的记录 线面只说实现登录记录的方法 和 一些问题 项目用的springMvc  hibernate  记录登录登出用的是实现HttpSessionBindingListener接口(这里有详细介绍
ssh2-aop这是一个用来做登录、登出日志的系统
ssh2-aop这是一个用来做登录、登出日志的系统
系统日志之登录
与登录相关的日志 相关文件 • /var/log/btmp 记录错误的登录尝试,执行lastb命 令或last -f /var/log/btm查看不成功的登录尝试。 • /var/log/wtmp 登录和退出记录,由last命令读取。 • /var/run/utmp 记录当前登录进系统的各个用户, 由who命令读取。 • /var/log/secure :Linux系统安全日志,记录用...
用户登录日志功能
## 网站开发 用监听器写 用户登录日志功能 我用的是 ssm框架   遇见问题: 在监听器中注入类出错 原本通过注入 框架会帮我实例化的类    结果是null 看了下面的文档解决了 https://www.cnblogs.com/fengli9998/p/6542829.html 新建一个类继承这三个接口:HttpSessionListener 、ServletRequestListen...
Linux中系统户登录和操作日志的记录
用户登录退出的日志记录在 /var/log/secure如果需要记录每个用户操作的记录,在/etc/profile配置文件的末尾加入以下脚本代码来实现:historyUSER=`whoami`USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]; thenUSER_
DMS-linux系统用户登入/登出记录系统
概述:从linux系统中记录用户登入登出的文件中,读取数据,整理用户登入和登出的时间,和在线的时长,最后写入到oracle数据库。整个程序由客户端和服务端组成。客户端部署在客户机上,用于采集客户机上用户的登入登出信息。服务端部署在可以连接到oracle数据库的主机上,用于整理数据,和向数据库插入数据。 涉及到的知识点: socket网络编程 动态库的制作 Makefile文件制作 pro...
6.登录系统-单点登录问题-基于redis的单点登录同步登出与帐号退出的功能设计
今天项目做到了基于redis的单点登录登出设计,所以有必要记录一下。重点知识,面试。涉及到的知识点:token,UUID,userID(模仿微信的扫码登录),cookie,redis等什么是SSOSSO英文全称SingleSign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是...
shiro简单登录+logback日志记录
文章链接:https://blog.csdn.net/sutongxuevip/article/details/80595431,如若没有足够积分可留下邮箱或者私信,有问题可在文章底部一起讨论
Web应用初体验——登录登出验证系统
Web应用初体验——登录登出验证系统本系统所用技术包括:jade模板(加强的html),bootstrap(css样式集),express(Web应用框架),js,nodejs,mysql,token验证等。 源码地址: https://github.com/qingywen/DEMO/tree/master/Greeni 原文链接:https://qingywen.github.io/2017
springAop之 记录登入日志
注解类import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME) @T
CAS单点登录-单点登出/退出/注销(十二)
CAS单点登录-单点登出/退出/注销(十二) 据说cas3.x开始支持单点注销,但我们目前讲的是5.1.x,当然我们加入了单点登录,一般来说都需要单点注销的,让个子系统支持单点注销需要做一些工作 本章目标 logoutTyle类型讲解 cas退出流程分析 cas client单点退出配置 buji(shiro、pac4j)单点退出配置 重点目标: A系统需要访问cas输入
用户登录日志表设计
用户登录 日志表 设计
ssm框架构建的日志网站
日志网站,包含用户登录,注册,发表日志,分页查询日志等功能,数据库语句包含在工程里。工程导入即可运行。
CAS 单点登录/登出 系统
前言:     在我们的实际开发中,更多的是采用分布式系统。那么问题来了,对于分布式系统的登录问题,我们如何解决呢?     如果说我们在每一个系统中都要进行一次登录,那么用户体验度也就差的没法用了。以京东商城为例,如果用户在登录京东商城的时候需要登录一次,在查询商品的时候还有在登录一次,加入购物车是还要重新登录,...(注意,每跳过一个页面都是进入了一个新的系统,请看他的url 地址的变化)...
Spring-Security笔记10 登出操作
在spring-security.xml中配置:<!-- 登出操作 --> <!-- invalidate-session是否销毁Session --> <!-- logout-url logout地址 --> <!-- logout-success-url logout成功后要跳转的地址 --> <sec:logout invalidate-...
asp.net web api中介绍一个程序中操作(登录、登出、增加、修改、删除等等)日志记录功能的实现
1、首先建一个拦截器类继承自System.Web.Mvc.FilterAttribute和System.Web.Mvc.IActionFilter:代码如下 namespace aaa { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] public ...
Postgres日志记录用户登录退出信息
设置是否记录session登陆退出信息,默认为不记录。 highgo=#show log_connections;  log_connections -----------------  off (1row)   highgo=#show log_disconnections;  log_disconnections --------------------  off (
Java后台做登录日志功能
HttpServletRequest request = ServletActionContext.getRequest();  System.out.println("浏览器基本信息:"+request.getHeader("user-agent"));  System.out.println("客户端系统名称:"+System.getProperty("os.name"));  System....
C#--记录用户程序退出时间日志
退出日志时间的逻辑根据用户登录的日志表,’Logid’ 创建‘EixtTime’时间 程序关闭时–事件通用获取服务器时间方法的编写通用数据访问类添加方法: 在登录时主程序定义全局变量用于接收登录的信息主程序定义全局变量:全局变量接收 : logId,LoginLogId,SPName,ServerName,LoginPwd管理员实体类需要添加LogId扩展实体 退出时间保存到日志SQL表的方
登入登出功能实现(条件渲染)
登入登出功能实现(条件渲染) import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; class LoginControl extends React.Component { constructor(props) { super(props); t...
JSP开发的登录登出(Web)
JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出JSP的登录登出
Vue系列4 - Vue+store 保存用户登录信息和退出登录
1.store/index.js import Vue from 'vue' import Vuex from 'vuex' import qs from 'qs' import example from './module-example' import _ from 'lodash'; Vue.use(Vuex) Vue.prototype.$qs = qs /* * If not b...
解决Spring Security 登录(登出)成功 后置处理的业务
目前的项目使用了 Spring Security 2.0.4 权限管理框架。 登录授权都由框架直接处理,所以也就产生了登录成功后 记录登录日志的需求。 找一上午资料基本都是 Spring Security 3的配置实现。最后随手拿起Spring企业应用开发详解看了一下Acegi的章节,发现原来如此。 首先看一下关键代码 ProviderManager 类中 在 doAuthenticat...
oracle 利用触发器记录用户登录登出信息
1.建表用来存储登录信息   create table LOG$INFORMATION (   USERNAME VARCHAR2(30),   TERMINAL VARCHAR2(50),   IPADRESS VARCHAR2(20),   OSUSER VARCHAR2(30),   MACHINE VARCHAR2(64),   PROGRAM VARCHAR2(64)...
springmvc 利用aop对controller 进行日志异常记录 和登陆验证
<aop:aspectj-autoproxy proxy-target-class="true"/>写到spring-mvc.xml配置文件中。 网上有很多类似文章服务器启动时,一直初始化bean 报错 主要是缺少jar包org.springframework.beans.factory.BeanCreationException: Error creating bean with n...
(三)SSO之CAS框架单点退出,退出到CAS登录界面
应需求的改变、CAS自定义登录页面不安全,不再使用,于是我一下子回到了原点,在linux上部署上了没有加自定义登陆界面的CAS,接下来开始修改CAS自己默认的登录界面为我们的界面。 一下子修改成功是根本就不可能的,于是删一点cas的源码的东西,看看效果,然后再删除一些不必要的东西,看看效果,再加上自己系统登录界面的样式,就这样一步步的做成自己系统登录界面的样式,登录界面完毕后就是,CAS默认的登出界面了。
绝对完全跨域统一单点登录登出
应用场景:多个系统下同属于一个用户,当用户登录了web1系统,那么访问web2,web3. . . . 时候,用户就无需再次登录。如:淘宝与天猫,登出也如此,一个系统登出,其他系统的登录也随之失效,这就是统一单点登录登出。这里配置三个web系统,一个用户中心系统为栗子配置hosts实现跨域:127.0.0.1 ssofront.ljtest.xxxx.com #用户中心 127.0.0.1 my...
angularjs之退出登录
退出登录逻辑 删除本地用户数据 删除本地缓存的用户名和用户id angularjs部分 $scope.logout = function(){ delete $localStorage.accountId; delete $localStorage.token; delete $localStorage.username; delete $localStorag
【微信点餐】-- 登录登出(分布式系统下的session理论)
  传统后台管理,在初始化时会在数据中插入超级管理员的初始用户用户名和密码,后续超级管理员通过界面添加普通管理人员的用户名和密码,普通用户再在登录界面输入用户名和密码完成登录。   由于卖家端涉及到的人员定位较少,微信的相关特性为重点。因此微信端设置为扫码登录。在该功能中,项目初始化时,其实是在数据库中添加了有访问权限用户的openId,这样微信授权拉取了用户身份后,如果openId有权限,则放...
Linux查看登录用户日志
一、Linux记录用户登录信息文件 1  /var/run/utmp----记录当前正在登录系统的用户信息; 2  /var/log/wtmp----记录当前正在登录和历史登录系统的用户信息; 3  /var/log/btmp:记录失败的登录尝试信息。 二、命令用法 1.命令 last,lastb---show a listing of la
退出登录 - SpringSecurity框架实现用户退出登录
我们还是基于上一篇文章进行编写:https://blog.csdn.net/weixin_42629433/article/details/83352015 一. 配置文件 在 spring-security.xml 配置文件中配置有如下退出申明 : invalidate-session : 是否销毁 session 中的本次访问数据记录; logout-url : 退出的路径; log...
shiro学习--1、简单的登入和登出
一、简介Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro 要简单的多。从Shiro 内部来看下 Shiro 的架构,如下图所示:Subject:主体,可以看到主体可以是任何可以与应用交互的 “用户”;SecurityManager:相当于 Spr...
0008、node 之登录状态的保存和退出
登录状态的保存实际是去操作cookies值,(登录成功后就保持cookies值,然后在路由的时候把cookies值的有无响应回去,然后页面在渲染的时候判断这个cookies值是否存在,如果存在就进入登录后的页面,否则就是登录前的页面) 退出登录实际就是清楚cookies值,然后通过网站重定向指定其跳转到哪一个页面 运行结果: 通过谷歌浏览器查看
cas4.0.4添加登录日记到数据库
记录cas登录信息到数据库
SSM实现登陆登出
第一步:   在springmvc.xml配置文件里面配置一个拦截器的配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*/**"/> <mvc:exclude-mapping path="/static/**"/&...
使用Spring配置线程池并保存日志信息
一、说明     在项目中添加访问日志、保存异常信息等,虽然能够有效地管理系统,但与此同时也带来了系统性能、用户体验差等不好的问题,原因是,我们需要花费相当一部分资源去处理这些数据。如何解决这些问题呢?使用线程池的技术可以很好地解决这个问题。     相对于单线程在创建时需要耗费大量资源、维护困难的问题,spring提供的线程池技术可以帮助我们管理这些线程并避免频繁地去创建和销毁它们,对于系统...
基于CAS实现单点登录(SSO):cas client端的退出问题
自从CAS 3.4就很好的支持了单点注销功能,配置也很简单。 之前版本因为在CAS服务器通过HttpClient发送消息时并未指定为POST方式,所以在CAS客户端的注销Filter中没有收到POST请求(要知道Filter只对Post请求起作用),也就没有做session销毁处理。   两个业务系统APP1和APP2 在没有配置单点退出时,效果是这样子的 1:登录APP1,然后经过CA
web的登录与登出功能
登录界面package com.sys.ctrl;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframewor
【linux学习】linux 用户退出命令
linux 用户退出怎么命令
单点登录cas常见问题(一) - 子系统是否还要做session处理?
如果使用phpcase等cas系统提供的客户端sdk,他帮我们自动做好了session的处理:cas中心验证用户凭证后,会把用户信息传递给子系统,子系统的客户端sdk会把cas中心传回来的用户信息保存到session中(默认是保存user),并且在返回浏览器时将sessionid写到cookie中 可以在子系统登录后,打印出sessionid和内容                 var_du
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 web登录系统教程 区块链问题