基于Spring MVC框架的Web登录模块的设计与实现

摘要:用户登录模块是管理系统中非常重要的部分,该文在详细介绍Spring MVC框架的基础上,灵活运用Spring MVC框架进行Web登录模块的设计,完成了用户登录,出错处理,超时检查等功能,使得系统的易用性、安全性、稳定性和可扩展性都得到了极大的提升。
  1 概述
  随着世界经济的繁荣和科技的迅猛发展,信息化的程度越来越高,各种软件相继出现。大批量种类繁多的软件虽然提高了信息处理的效率,但是安全方面的隐患也日益突出。用户想要进入到不同的应用软件和服务系统时都必须进行登录认证,随之而来的遗忘密码、黑客攻击、密码泄露等问题,都将严重干扰到业务运作。在这种情况下,一种安全可靠的用户登录模块就显得必不可少。
  基于这种情况,该文研究了如何利用Spring MVC框架开发一款安全、灵活的Web登录模块。系统的任何用户操作界面都可以提供登录入口,提示用户进行登录,通过认证后,合法用户就可以使用他相应的权限功能。
  2 Spring MVC框架概述
  Spring是分层的Java SE/EE应用一站式的轻量级开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架提供了构建Web应用程序的全功能 MVC 模块。在Spring的MVC中,支持各种视图技术,例如JSP、Velocity、Tiles等。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
  Spring MVC的角色划分非常清晰,各组件的功能单一,很好地达到了高内聚低耦合的效果。Spring MVC相当灵活,且可以扩展,其MVC框架是围绕 DispatcherServlet这个核心展开的。核心控制器的作用就是截获请求,并将其分发到相应的业务控制器中,由业务控制器调用业务处理方法处理业务逻辑,返回一个模型和视图对象,核心控制器再根据此对象找到视图显示出处理结果。
  3 登录模块的设计与实现
  本登录模块采用B/S的三层结构模式,分为服务器、用户和数据库三个部分。客户端与服务器之间采用HTTP协议进行通信,Web服务器采用Tomcat6.0,数据库服务器采用Oracle10.0.2。在用户登录模块的开发过程中,提供对身份认证、权限分配等有效的安全策略,来实现用户的验证与登录,在没有得到系统授权的前提下是无权对文档进行浏览和管理的。
  3.1 总体设计
  用户登录模块按照不同的人员职责,提供不同的登录界面,具体包括系统管理员、管理员、游客等登录界面。有游客,管理员,身份证,电话号码+密码等多种登录方式。
  登录模块采用基于角色的身份认证技术,根据不同的用户角色,提供不同的登录选项,分配不同的使用权限。根据实际情况定义了三种角色:超级管理员、管理员、注册用户,通过登录界面确认用户的身份,再根据不同的用户类型确定其相应的操作权限。
  其中,超级管理员具有对角色、权限、菜单等进行增删改查操作以及角色的赋权。管理员具有对用户账号管理,信息的修改、统计等处理权限。注册用户具有修改个人资料,信息浏览等权限。
  3.2 数据库配置
  public UserInfo getUserByUserName(String userName){
  UserInfo userInfo=null;
  try{
  userInfo=(UserInfo)
  getSqlMapClientTemplate().queryForObject("USERINFO.getUserByUserName", userName);
  }catch(Exception e){
  logger.error(e);}
  return userInfo;}
  3.3登录模块的实现
  本模块登录时没有区分用户角色,当进入系统后根据角色权限加载菜单项。用户通过输入用户名和密码,然后单击登陆按钮实现以上信息的提交并验证,若正确无误进入系统。
  3.3.1错误锁定
  登陆模块根据用户身份进入系统,显示拥有权限的操作菜单。如果用户不存在,则找不到数据;如果用户存在,密码错误,同样找不到数据,均提示用户名密码错误;如果用户名和密码同时存在,则获取用户信息,并进入相应的界面。为系统安全考虑,若用户连续而且超过三次输入密码错误,则需要输入验证码。errorTime为输入错误次数,当验证码输入为空,或输入错误,就返回-1,此时对该账号锁定, 登录失败,必须经过超级管理员解锁才能重新使用。部分代码分析如下:
  if(errorTime>=3){
  if(entryVlidateCode==null||(!entryVlidateCode.equals(realValidateCode))){
  map.put("errorMsg","验证码错误");
  map.put("userInfo",null);
  map.put("errorCode",-1);
  return map;
  }}
  3.3.2在线提示
  用户在登录时,会创建一个session,用于保存用户信息。如果在线用户列表中查找到该用户已经在线,同时又在其他机器登录,那么首先提示用户已经在线,然后给出选择挤下或者取消登录。如果挤下,那么被挤机器就无法继续前后台的数据交互,自动退出,登录失败。也就是限制用户重复登录,每个时刻只允许在一台机器上登录。   先从ServletContext中取出存放用户登录的session相关信息,检查这个列表,若已经存在相同的登录信息,则说明用户之前已经登录过,移除前面一条记录。再把此次登录的信息加入到ServletContext中。监听实现SessionListener类,当session失效的时候,从ServletContext中移除相应记录。过滤所有页面,sesison失效后转向登录页面。但是要实现用户二次登录后强制先前的登录失效,需要在这里控制。登录时存入的是session值和session ID,用户二次登录时移除了前次记录,存入的session值是相同的,但是ID却不同。 当第一次登录页面请求的时候,在这里检查ServletContext中是否存在当前的session值与ID,如果没有就销毁这个session。
  3.3.3非法退出
  对于WEB系统来说,均遵循HTTP协议的请求/应答模型。所以网站本身是不能保存数据的,用户正确登录后,系统更改当前用户的状态为在线。如果用户在使用系统时,不通过退出按钮来执行退出操作,而是非法退出,包括网络断线、系统瘫痪、突然断电等情况。这些都使系统没有给用户记录一个退出系统的操作机会,这种情况下用户的在线状态会一直保留,从而影响下次登录。因此,系统应该设置一个定时器,定时清理并且还原用户的初始状态。
  当用户以登陆身份请求服务器资源时,记录用户的最后活跃时间。接着拟定一个失效时间,假设某个用户的最后活跃时间和当前时间的差值大于这个失效时间,也就是说该用户这一段时间都没有和服务器交互了,那么就认为该用户已下线,否则认为他是在线的。
  3.3.4超时管理
  Session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。应用session对象时要注意它的生命周期,当用户首次访问时将产生一个新的会话,从用户打开网站生成,关闭浏览器删除,以后服务器就会记住这个会话状态,在这一段时间内,用户都可以访问到会话对象中保存的信息。当会话生命周期超时,或者服务器端强制使会话失效时,这个session就不能使用了,需要用户重新登录。
  通过setMaxInactiveInterval()方法可以设置Session的生命周期,通过getMaxInactiveInterval()方法可获得Session的生命周期,如果超过这个时间则失效。
  4 结束语
  信息的规范化、高效化管理在很大程度上体现了一个组织的工作效率,而登陆功能在其中起到了关键性作用,同时也为系统提供了安全性保障。该文对Web登录模块进行了分析,使用Spring MVC框架进行设计,提出了解决方案,实现了系统用户的登录、出错处理、超时检查等功能,使系统的重用性和扩展性更好,用户界面简洁统一,功能灵活,提高了系统的易用性、安全性及稳定性。
本文摘自中国论文网,原文地址:http://www.xzbu.com/8/view-4814992.htm

你可能感兴趣的:(spring mvc)