Java权限管理(授权与认证)

CRM权限管理

一、概念

权限管理就是管理用户对于资源的操作。本 CRM 系统的权限(也称作资源)是基于角色操作权限来实现的,即RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间都是多对多的关系,为了实现表之间多对多的关系,必须将一个多对多的关系通过一个中间表分为两个一对多的关系。因此引入中间表,用户角色表和角色权限表。

二、数据库

权限管理模块一共涉及五张表:

三张主表

a) 用户表(t_user)、

b) 角色表(t_role)、

c) 资源表(t_module)、

两张中间表

a) 用户角色表(t_user_role)、

b) 角色—资源表(t_permission)、

在这里插入图片描述

在这里插入图片描述

三、权限管理实现

在这里插入图片描述

1、模块、角色、用户的单表CRUD

模块CRUD:操作t_module表在这里插入图片描述

角色CRUD:操作t_role表
在这里插入图片描述

用户CRUD:操作t_role表

在这里插入图片描述

2、授权

角色赋予权限
  给角色赋予权限:使用ztree进行权限树结构的构建

a)赋权限
1、先把本模块绑定;

2、绑定父模块;

3、绑定子模块

b)删权限

1、先删除本模块;

2、删除子模块;

3、删除父模块(判断父模块是否有其他的子模块关联词角色,如果没有就取消,如果有就关联)

a) 使用jQuery的插件zTree构建一个资源的树结构,树中的内容为表t_module中的数据
在这里插入图片描述
在这里插入图片描述
b) 用鼠标点击zTree中的选择框操作表t_permission(角色资源表)实现给角色赋予权限
在这里插入图片描述

用户赋予角色
  给用户赋予角色:使用的combobox多选
  
a).添加账号:直接往t_user_role插入记录
b).修改账号:先删除,在添加

创建用户或者是修改用户信息时都可以通过combobox多选框给用户赋予角色操作t_user_role(用户角色表)
在这里插入图片描述

认证

思路:

从t_permission表中获取权限值(acl_value)与页面传来的值或者与注解中明确的权限值比较,下面提供两种思路:

1.页面传递过来Request.getParameter(“permission”);比对 根据userId查询数据库查到的权限列表 contains

2.通过注解明确模块权限值:@requirePermission(permission=”1010”;

后台认证:Spring AOP和自定义注解实现认证
  获取用户权限存入session,然后用户操作资源时会提交一个资源的权限值,在判断用户是否包含有此权限

使用Spring AOP进行拦截认证

             第一步:开启注解驱动<aop:aspectj-autoproxy />

             第二步:创建一个代理类使用@Aspect @Component注解进行标记

             第三步:定义一个切入点@Pointcut(" *execution('com.shsxt.controller.*.*((..))')")

                                       public void pointcut() {}

             第四步:编写一个增强:@Around(value="pointcut()")

                    1.判定用户是否登录

                    2.获取用户权限

                    3.将权限存入session--》给前端页面判断

                    4.后台的权限校验

                    5.返回

自定义注解在这里插入图片描述

编写切面类

定义切入点point:自拦截有权限注解的方法,更能提升性能

//@Pointcut("execution(* com.shsxt.controller.*.*(..))")

    @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)")

    public void pointcut() {

      

    }

通过前台传递permission参数实现:

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));

       String permissioFront = request.getParameter("permission"); // 后台权限认证

       AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");

通过注解实现

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));

       if (requirePermissions != null) {

           String permission = requirePermissions.permission(); // 后台权限认证

           throw new UnAuthPermissionException(permission, "您无权操作此模块");

       }
    3.引入AOP的namepsace并开启AOP注解驱动

在这里插入图片描述

<!-- 启用@Aspect注解 -->

<aop:aspectj-autoproxy />

4.在需要权限认证的方法上启用注解
在这里插入图片描述

Permission应该和module表中的act_value保持一致

前台认证:Freemarker 内建函数判断
获取用户权限后在前端的freemarker中利用freemarker语法去判断用户是否能够操作此资源(list?seq_contains(‘权限值’))

1.SQL:

SELECT

       DISTINCT p.acl_value

FROM

       t_permission p

-- LEFT JOIN t_role r ON r.id = ur.role_id

left JOIN t_user_role ur on p.role_id = ur.role_id

WHERE

       ur.user_id = 10;

2.在AOP切面类中查询permission取出权限值列表、放入Session
在这里插入图片描述

3.前台页面判断: 解释:利用freemarker 内建函数sql_contains判断序列是否包含参数值,包含返回true

类似于java中集合hashmap.contains(value);

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
权限管理系统》该项目采用技术SpringMVC+Spring+Hibernate+jquery+js+css+dtree+MD5 等技术 ,项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等    项目功能介绍:    系统管理:用户登录、用户退出    用户管理:主要实现对用户信息的增删改查审核等功能    角色管理:主要实现对角色信息的增删改查、角色绑定用户、角色绑定操作等功能    模块管理:主要实现模块信息的增删改查等功能    权限管理:实现系统权限控制,页面中权限控制以及用户请求的权限控制      1、学会各类开发软件安装、项目导入以及项目发布,含项目源码,需求文档,配套软件等     2、该项目主要功能完善,主要用于简历项目经验丰富,以及毕业设计或者二次开发    3、提供项目源码,设计文档、数据库sql文件以及所有配套软件,按照教程即可轻松实现项目安装部署项目实战课程:代码视频讲解版如下java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572JavaWeb项目实战之宿舍管理系统https://edu.csdn.net/course/detail/26721JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值