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. JS继承(简单理解版)

    童鞋们,我们今天聊聊js的继承,关于继承,平时开发基本用不到,但是面试没有不考的,我就想问,这是人干的事吗? 好吧,迫于社会主义核心价值观,我们今天就来简单说一说js的继承,谁让它是面向对象编程很重要 ...

  2. Android问题集锦An error occurred while automatically activating bundle com.android.ide.eclipse.adt .

    这是Eclipse的问题,重启之后问题依旧. 在坛子里找到这个办法,果然好用. 命令行到eclipse路径运行:eclipse.exe -clean

  3. ASP.NET的底层体系2

    文章引导 1.ASP.NET的底层体系1 2.ASP.NET的底层体系2 引言 接着上一篇ASP.NET的底层体系1我们继续往下走 一.System.Web.HttpRuntime.ProcessRe ...

  4. AutowireCapableBeanFactory 根据名称:自动装配的BeanFactory,其实也是对BeanFactory的增强

    //自动装配的Bean 工厂 public interface AutowireCapableBeanFactory extends BeanFactory { //工厂没有自动装配的Bean int ...

  5. shell 一些题目

    在a.log中精确查找含有msyql单词的行a.log文件内容如下: mysqlmysql mysqlmysql aa mysql_mysqla mysql b_mysql aa _mysqla _m ...

  6. sql 字符串连接

    const string FMCG_BASH = "清除重复商品"; var sqls = new List<string>(); //// Fmcg sqls.},R ...

  7. BezierCode 工具使用

    概要 今天无意间看到一个视频,发现了一款绘画Bezier 图形绘制并自动生成OC代码的神器, 因此马上先记录下. 之前一直很纠结如果程序员自己去绘制图片,久那么使用bezier 自己去画吗? 答案是: ...

  8. SDOI2018Round1 && 九省联考 爆炸记

    Day 0 做了一上午火车,大概中午十二点左右到了烟台核电培训中心宾馆,宾馆蛮不错的,跟我在北京参加英才论坛时住的宾馆舒适程度上差不多. 下午花式颓颓颓,吃了晚饭(体验一般)去试机,听说用Lemon评 ...

  9. 深入理解Java虚拟机(自动内存管理机制)

    文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...

  10. 【玲珑杯 round#18 A】计算几何你瞎暴力

    [Link]:http://www.ifrog.cc/acm/problem/1143?contest=1020&no=0 [Description] [Solution] 因为每个点的(xi ...