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 系统权限设计的更多相关文章

  1. SpringCloud微服务实战——搭建企业级开发框架(二十一):基于RBAC模型的系统权限设计

    RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限,从而达到用户和权限解耦的目的. R ...

  2. flask-login ----系统权限设计部分小结

    tips: 事实证明.开发是一项苦力活.但是代码只有自己写的才是令人感到放心的.不过仅仅是从开发角度来说.从维护和安全角度来说,当然还是引入模块比较爽 但是引入的模块总会有一些问题.碰到的最大问题就是 ...

  3. web系统权限设计

    应该有七张表 1.appSystem 表: 主要在多系统中的 统一权限管理:主要就是系统的URL USE [Star_Permission] GO /****** 对象: Table [dbo].[A ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  5. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

  6. OA系统权限管理设计(转载)

    不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...

  7. SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建

    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...

  8. 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(N&gt;=4)种方法

    权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...

  9. 26、生鲜电商平台-RBAC系统权限的设计与架构

    说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...

随机推荐

  1. sass与less的区别?Stylus又是啥?

    现在写样式大家基本上都会用上CSS预处理器,而比较流行的预处理器就是这三位老哥了Less.Sass 和 Stylus: 在这之前,我们先了解一点,sass和scss有什么区别? SCSS 是 Sass ...

  2. Objective-C 中的 Meta-class 是什么?

    在这篇文章中,我关注的是 Objective-C 中的一个陌生的概念-- meta-class.在 Objective-C 中的每个类都有一个相关联的 meta-class,但是你很少会直接使用 me ...

  3. HashMap(常用)方法个人理解

      Hashmap的存值: public static void main(String[] args) { ///*Integer*/map.put("1", 1);//向map ...

  4. python的基本数据类型与字符串的操作

    一.基本数据类型 (int, bool, str ) int: 整数 str:字符串,一般不存放大量的数据 bool:布尔值,用来判断.True ,Flase list:列表,用来存放大量的数据. [ ...

  5. day23_4_hashlib

    #!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...

  6. P1030 求先序排列 /// 二叉树的遍历

    题目大意: 给一棵树的中序排列 后序排列,求这棵树的先序排列 https://www.luogu.org/problemnew/show/P1030 二叉树的四种遍历解说 几种遍历的递归实现 后序排列 ...

  7. raw_input和sys.stdin.readline()

    sys.stdin.readline( )会将标准输入全部获取,包括末尾的'\n',因此用len计算长度时是把换行符'\n'算进去了的; raw_input( )获取输入时返回的结果是不包含末尾的换行 ...

  8. vue+ivew使用Collapse 折叠面板把全部面板展开

    1.需求: 在使用搜索功能时候,只显示搜索到的panel并且将搜索到的含有该专家的panel展开,如图                1.html,注意黄色部分,作为每个panel的key值,要唯一 ...

  9. leetcode-123-买卖股票的最佳时机③

    题目描述: 方法一: class Solution: def maxProfit(self, prices: List[int]) -> int: dp_i1_0 = 0 dp_i1_1 = f ...

  10. LUOGU P3382 【模板】三分法 (三分)

    传送门 解题思路 三分,填坑.每次取l与r的中间值mid,然后向左移一点点,向右移一点点进行判断,判断时用秦九韶算法即可. #include<iostream> #include<c ...