JEECG登陆全过程

2023年7月1日09:05:34

登录全过程

 

配置的过滤器:

类型

名称

Url匹配规则

备注

Filter

openSessionInViewFilter

OpenSessionInViewFilter

*.do

用来控制Hibernate的Session,根据请求开启和关闭

encodingFilter

CharacterEncodingFilter

/*

字符集过滤器统一字符集编码为UTF-8

druidWebStatFilter

WebStatFilter

在该过滤器中配置Web应用和Druid数据源之间的管理关联监控统计

 

在登陆初始化控制器LoginController中定义了登录信息校验、管理员信息初始化、用户登录、用户菜单初始化等逻辑。

登录时action的路径为loginController.do?checkuser、loginController.do?login

在输入用户名、密码、验证码后执行执行登录操作

js代码如下:

[javascript] 
view plain
 copy

  1. //登录处理函数  
  2. function Login() {  
  3.     setCookie();  
  4.     var actionurl=$('form').attr('action');//提交路径  
  5.     var checkurl=$('form').attr('check');//验证路径  
  6.      var formData = new Object();  
  7.     var data=$(":input").each(function() {  
  8.         formData[this.name] =$("#"+this.name ).val();  
  9.     });  
  10.     $.ajax({  
  11.        async : false,  
  12.        cache : false,  
  13.        type : 'POST',  
  14.        url : checkurl,// 请求的action路径  
  15.        data : formData,  
  16.        error : function() {// 请求失败处理函数  
  17.        },  
  18.        success : function(data) {  
  19.            var d = $.parseJSON(data);  
  20.            if (d.success) {  
  21.               loginsuccess();  
  22.               setTimeout("window.location.href='"+actionurl+"'", 1000);  
  23.            } else {  
  24.                if(d.msg == "a"){  
  25.                   $.dialog.confirm("数据库无数据,是否初始化数据?"function(){  
  26.                      window.location = "init.jsp";  
  27.                   }, function(){  
  28.                      //  
  29.                   });  
  30.               } else  
  31.                   showError(d.msg);  
  32.            }  
  33.        }  
  34.     });  
  35. }  


首先会请求checkurl,去进行用户信息的校验,校验成功后请求actionurl执行登录操作。 

校验和登录操作都是在登录控制器LoginController中实现的。

在类LoginController中的checkuser来完成验证任务

    验证码校验:request参数中取到验证码randCode,校验该验证码是否为空,是否和session中存放的一致。如果为空或者不一致,会返回异常信息到页面,在页面显示。

    用户信息校验:在POST数据中取出用户凭证即参数中的TUser user。首先会去查询系统用户父类表t_s_base_user及系统用户表t_s_user中是否有数据,来判断数据库有无数据,来提示用户是否初始化数据库。(每个用户登录都要去查询出用户表中的所有操作进行校验,该步校验操作当系统用户量大时,大量的数据库查询操作会对系统性能有很大影响,建议加个条件判断,或者使用缓存技术,对查询的数据进行缓存,以减少没必要的数据库操作。)。

    在校验完数据库中是否有数据后,就进行了用户信息的校验,在用户信息校验时只进行了用户是否存在和密码匹配的校验,并没有进行其它信息的校验。(在进行登录校验时可以增加账户锁定检查、ip锁定检查(是否超过最大登录次数)、指定时间登录检查、指定ip登录限制检查(ip不允许登录)、用户登录审计(密码重试次数超过限定次数)等校验,使校验逻辑更加严谨)。

         在进行完数据校验后记录登录成功日志,返回验证成功信息。前台js方法//登录处理函数function login(){}接收到返回的登录成功信息后,执行loginController.do?login的跳转,在这里对用户的权限进行判断,用以展现用户拥有权限的菜单。

         JEECG的用户权限模型使用的是基于角色的访问控制模型,角色就是一个或一群用户在组织内可执行的操作的集合。

         RBAC的主要思想是将用户与角色关联,角色与访问权限关联,通过给用户分配适合的角色,让用户与访问权限相联系。用户自己不能进行自主授权和权限转移,必须通过角色来传递授权信息实现访问控制。由于角色/权限之间的变化比角色/用户关系之间的变化相对要慢的多,减小了授权管理的复杂性,降低了管理开销。

         RBAC基本模型主要由四个要素构成:用户、角色、权限和会话。

         每个Session是一个映射,一个用户到多个role的映射。当一个用户激活他所有角色的一个子集的时候,建立一个session。每个Session和单个的user关联,并且每个User可以关联到一个或多个Session。

         根据该权限模型,用户登录系统后,系统会根据登录的用户的用户id去查询用户角色关联表(t_s_role_user),该表中查询出该用户所拥有的所有的角色,根据查询出的用户角色关系列表,获取该用户拥有权限的一级菜单列表。然后在根据用户设置的主题风格跳转到不同的主页面。

  • 作者:lishaui1
  • 原文链接:https://blog.csdn.net/lishaui1/article/details/79459286
    更新时间:2023年7月1日09:05:34 ,共 2710 字。