JEECMS 系统权限设计
1、用户校验.
登录校验主要围绕着用户后台登陆的url拦截
a.围绕着用户登录过程中设计到两张用户表
jc_user:存储着用户的基本信息
jo_user:存储着用户登录、注册、更新时间及用户密码信息
b.后台用户登录负责处理的servlet是CmsLoginAct类,该类包含两个方法:
input:根据浏览器的请求指向用户登录页面。
submit:用户输入账号信息登录处理method。
@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public String input(HttpServletRequest request,
HttpServletResponse response, ModelMap model) {
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String submit(String username, String password, String captcha,String processUrl, String returnUrl, String message,
HttpServletRequest request, HttpServletResponse response,
ModelMap model) {
这里从submit展开,该方法中主要包含3个操作:
第一个就是用户的username、password的校验。
public UnifiedUser login(String username, String password, String ip)
throws UsernameNotFoundException, BadCredentialsException {
UnifiedUser user = getByUsername(username);//根据用户取得jo_user
if (user == null) {
throw new UsernameNotFoundException("该用户未注册: " + username);
}
//无需加密后比较
//TODO DavidfINCH
//if (!pwdEncoder.isPasswordValid(user.getPassword(), password) && !user.getPassword().equals(password)){
//不再启用暗文!
if (!user.getPassword().equals(password)) {//将取来的用户的密码和request获取的密码进行比较,如果成功则返回jo_user
updateLoginError(user.getId(), ip);
throw new BadCredentialsException("密码错误!");
}
if (!user.getActivation()) {
throw new BadCredentialsException("该用户信息需激活!");
}
updateLoginSuccess(user.getId(), ip);
return user;
}
获取到用户信息后将用户的认证信息保存到数据库中,同时产生一个认证key,放入到session
UnifiedUser user = unifiedUserMng.login(username, password, ip);
Authentication auth = new Authentication();
auth.setUid(user.getId());
auth.setUsername(user.getUsername());
auth.setEmail(user.getEmail());
auth.setLoginIp(ip);
save(auth);
session.setAttribute(request, response, AUTH_KEY, auth.getId());
第二个是从认证表中的取得的user_id ,再获取jc_user
最后根据传入的returnurl将direct到index.do去处理。
2、url校验
在整个过程中AdminContextInterceptor都对url进行拦截处理。
主要步骤:
从session中取得cmsUser也就是jc_user的信息。
比较url和user.getPerms
private boolean permistionPass(String uri, Set<String> perms,
boolean viewOnly) {
String u = null;
int i;
for (String perm : perms) {
if (uri.startsWith(perm)) {
// 只读管理员
if (viewOnly) {
// 获得最后一个 '/' 的URI地址。
i = uri.lastIndexOf("/");
if (i == -1) {
throw new RuntimeException("uri must start width '/':"
+ uri);
}
u = uri.substring(i + 1);
// 操作型地址被禁止
if (u.startsWith("o_")) {
return false;
}
}
return true;
}
}
return false;
}
---------------------
作者:jnaix
来源:CSDN
原文:https://blog.csdn.net/jnaix/article/details/84456496
版权声明:本文为博主原创文章,转载请附上博文链接!
JEECMS 系统权限设计的更多相关文章
- SpringCloud微服务实战——搭建企业级开发框架(二十一):基于RBAC模型的系统权限设计
RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限,从而达到用户和权限解耦的目的. R ...
- flask-login ----系统权限设计部分小结
tips: 事实证明.开发是一项苦力活.但是代码只有自己写的才是令人感到放心的.不过仅仅是从开发角度来说.从维护和安全角度来说,当然还是引入模块比较爽 但是引入的模块总会有一些问题.碰到的最大问题就是 ...
- web系统权限设计
应该有七张表 1.appSystem 表: 主要在多系统中的 统一权限管理:主要就是系统的URL USE [Star_Permission] GO /****** 对象: Table [dbo].[A ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据 ...
- 解析大型.NET ERP系统 权限模块设计与实现
权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...
- OA系统权限管理设计(转载)
不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...
- 26、生鲜电商平台-RBAC系统权限的设计与架构
说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...
随机推荐
- 关于InputMethodManager的使用方法
InputMethodManager是一个用于控制显示或隐藏输入法面板的类(当然还有其他作用).获取InPutMethodManager的方法很简单. InputMethodManager imm = ...
- CSS 属性1
CSS列表属性 list-style:列表样式,取值:none.去掉项目符号或编号前面的各种符号. CSS边框属性:每个元素都可以加边框线 border-left:左边框线. 格式:border ...
- 从零开始学习jQuery (六) jquery中的AJAX使用
本篇文章讲解如何使用jQuery方便快捷的实现Ajax功能.统一所有开发人员使用Ajax的方式. 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即 ...
- WPF实现Drag/Drop操作
原文:WPF实现Drag/Drop操作 有时候我们方便用户操作,总会把一下Copy/Paste 或者 input操作转换为Drag/Drop, WPF 跟之前WinForm 一样提供了一些实现方式方便 ...
- vue2.0装jquery
1.在项目目录下 cnpm install --save jquery 2.在webpack.base.conf.js中加入 var webpack = require('webpack') 3.在p ...
- 华为手机honor5c root 方法备份
1.首先获取官方解锁码: https://www.emui.com/cn/unlock_detail 2.用 adb 执行 root 命令,如下: 498 adb devies 499 adb d ...
- leetcode-86-分割链表
题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va ...
- 廖雪峰Java11多线程编程-3高级concurrent包-2ReadWriteLock
ReentrantLock保证单一线程执行 ReentrantLock保证了只有一个线程可以执行临界区代码: 临界区代码:任何时候只有1个线程可以执行的代码块. 临界区指的是一个访问共用资源(例如:共 ...
- js图片预加载实现!
var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( ...
- vs nuget 本地安装 nupkg包
Install-Package fluentnhibernate -Source C:\Users\Alex\AppData\Local\NuGet\Cache\ 包名 路径