javaweb管理系统_「JavaWeb基础」权限管理系统(修订版)

前面我们做的小项目都是一个表的,业务代码也相对简单。现在我们来做一个权限管理系统,体验一下多表的业务逻辑,顺便巩固一下过滤器的知识。!该项目的GitHub地址:https://github.com/ZhongFuCheng3y/Privilege

目的

现在我有一个管理商品、订单的页面。当用户点击某个超链接时,过滤器会检测该用户是否有权限!

311e3fee657c6b9c46e111ae239f2228.png

需求分析

按照面向对象的思想,我们至少应该有权限(Privilege)和用户(User)实体。两个实体足够了吗?细想一下,如果我们有多个用户,多个用户也有多个权限,当要为用户授权的时候,这样子就会非常麻烦!所以我们应该引入角色(Role)这个实体!

引入角色(Role)这个实体方便在哪呢??把权限赋给角色(比如:把删除、修改的权限给管理员这个角色),管理员这个角色再赋给用户,那么该用户就有了修改、删除的权限了!

权限和角色是多对多的关系,角色和用户也是多对多的关系!

开发实体

用户实体

de92e4354ab1d3cb9b9eb3767c7f49a9.png

角色实体

8bd5befe1e8e71e974bbe22b5cbcc67b.png

权限实体

656947638cabeee63042aa3600858d20.png

改良

用户和角色、角色和权限都是多对多的关系,这是毋庸置疑的!我们也按照面向对象的方法来设计,用集合来记住另一方的数据!

但是呢,我们想想:

  • 在权限的Dao中,在查看权限的时候,有必要列出相对应的角色吗??
  • 在角色的Dao中,在查看角色的时候,有必要列出相对应的用户吗??

答案是没有的,一般我们都不会显示出来。所以,权限的实体没必要使用Set集合来记住角色,角色实体没必要使用Set集合来记住用户!

改良后的权限实体

fd837304eb7e1d2f5ab17b03a01b58ab.png

改良后的角色实体

869dca2782d3cc5292d73c62eac97a28.png

在数据库中建表

user表

7d4d0b735aeeba238920d95f3d756977.png

role表

57de97383340fa41410259f659ea27e1.png

privilege表

24265a3c6e7ad3140972c39833dc069d.png

user和role的关系表

0f4b8c95ff50812c3e40b7f535b11bf3.png

role和privilege的关系表

df5199cf7d79dbe536e11526aac7c886.png

注意:user和role的关系表、role和privilege的关系都有role_id作为外键,外键的名称是不能一样的!

开发DAO

PrivilegeDao

c52e80ac7e8b68cc78dff902b1884981.png

UserDao

540e4b9f6af638964669661feff17fc4.png

RoleDao

31cc57e0b80e73b33fc97f12c5c155f9.png

补充

上面的仅仅是单表的Dao功能,User和Role表是多对多的关系,Role和Privilege表也是多对多的关系。

前面已经分析了

  • 在User对象中,需要一个Set集合来记住Role的关系。【显示用户的时候,应该把所有角色显示出来】
  • 在Role对象中,需要一个Set集合来记住Privilege的关系【显示角色的时候,应该把所有权限显示很出来】。

所以应该在UserDao有获取某用户所有的角色的方法

00db5d751cce2426caf99655f93d4b0a.png

在RoleDao有获取所有权限的方法

e75ba198ab47768d48199537db80853f.png

我们既然能获取得到用户所有的角色了,获取得到角色所有的权限了。那自然我们就应该有修改用户的角色功能,修改角色的权限的功能啦!

我们先来分析一下它怎么写:要修改用户所拥有的角色,应该知道修改用户是哪一个,所以需要用户的id或者User对象!修改的角色是什么,需要Role对象或者装载Role对象的集合!

在UserDao有修改某用户角色的方法,我们是想把所有的角色都删除了,再添加新的角色

f5db638ffb61cb236636ae07ff19946e.png

在RoleDao有修改角色权限的方法,和上面是类似的。

0b05e5b5d091fe09aba59ce17b6cdaf8.png

更新

刚才又思考了一下:

  • 其实我们并不需要在User类用使用集合来维护Role,在Role中使用集合来维护Privilege。在原本的做法我们已经看到了,我们完全是不需要这两个变量也能完成效果的。
  • 那么,现在问题就来了。什么时候我们才需要在实体中使用变量来维护多的一方的关系呢???我觉得是这样的:当我们在查询一方数据的时候,另一方的数据也同时需要展示。那么此时我们就应该使用集合来维护多的一方数据了。
  • 基于上面一个例子,就比如:订单与订单项。当我们查看订单的时候,同时一定会把所有的订单项都列举出来。
  • 再比如:当我们查看购物车的时候,就需要把所有的购物项都列举出来。
  • 而我们使用展示用户的时候,并不需要第一时间就把角色列举出来,而是通过超链接来查看用户下的角色,基于这种情况,我觉得我们是不用使用集合变量来维护多的一方的数据的。

这就跟Hibernate的懒加载差不多。用到关联关系的数据的时候才加载,没有用到的时候就先不查询数据库。

开发BusinessService

UserService

09f26409fa1f6c21bf30f7143bd17854.png

RoleService

68f5d66ada1bf5817c9e082c033833f6.png

PrivilegeService

1102e5bcbbfade188b36c32b69c2a64f.png

开发Web

用户模块

添加用户

  • 提供页面界面的Servlet
//直接跳转到显示添加用户的界面request.getRequestDispatcher("/WEB-INF/jsp/addUser.jsp").forward(request, response);
  • 显示页面的JSP
0cb13a722c8a42d5dc35dbc29aa5aa53.png
  • 处理表单数据的Servlet
5afd42007ebc0c2003df5e55b901ca64.png

显示用户

  • 提供页面界面的Servlet
895170722f82dfcd12a89905c3d1e62c.png
  • 显示页面JSP
9d922d0f75fefa50a7b562b0093a8d2f.png
  • 效果:
7a25ad863f2aa91b5f25b8ce4ab55458.png

为用户添加角色

在显示用户的基础上,应该添加为用户授权角色的超链接。

20b6664d1847c4415cd95a6bffb6dd46.png
  • 效果:
fcbc99d828fca3d278a67a27bb44faa1.png
  • 处理显示授权页面的Servlet
17e5e8794986db06228b6ec6cd1f54e7.png
  • 授权页面JSP
9859bd4d18966ef5ec3967e3fd1ab9e6.png
  • 效果:
0f09e81027abdd6704eec8f7718795eb.png
  • 处理表单数据并为用户添加角色的Servlet
16fce9c0e29b49d287db021ddde2e661.png

角色模块

添加角色

  • 提供添加角色页面的Servlet
ec650ba0602d778ef8a8a98c15fe4f4f.png
  • 显示页面JSP
d49d54faad3e18c55936cd6ad8dea5bd.png
  • 处理表单数据并添加角色的Servlet
bb6748a84ad230e0f6120dc818c17774.png
  • 效果:
e286aabba16d1f1749e3f579f1c1fe3d.gif

查看所有的角色

  • 提供页面的Servlet
d73f8bc479b0b6bb47d0d07196c7fcc0.png
  • 显示页面JSP
c2ad1f2879e26c0f4fdb40cb70d9eb25.png
  • 效果
04c3f7ed93a30b74173872d4a82c4c8a.png

为角色授权

与上面是类似的,我们要在查看角色的时候,添加授权的功能!

d619be86ed2d1debacf02f92e4591b0d.png
  • 效果:
88291abdacdcb81c809a01c3b052a133.png
  • 提供显示权利页面的Servlet
8e8e564b0d9a8d8a8949170df3d28374.png
  • 显示页面JSP
a047130f8a298a69706d58e6ae2b1e50.png
  • 效果:
ad34c393bd71a74f7b819bed40c56f8d.png
  • 处理表单数据并添加角色权利的Servlet
f6bd7d6a551a91b75ad1f42a88873f2f.png
  • 效果:
556a9026a6e744c52e6ec42fb998d530.gif

权限模块

添加权限

  • 提供添加权限页面的Servlet
//直接跳转到jsp页面request.getRequestDispatcher("/WEB-INF/jsp/AddPrivilege.jsp").forward(request, response);
  • 显示页面JSP
5ace6b51876a50b6ae8bbd8f560ad46a.png
  • 效果:
02625a6f8d6abf525da10c9c41be2a12.png
  • 处理表单数据,并添加权限的Servlet
68d951df4d9d0b3a4ca008ed31087288.png
  • 效果:
eaa6cdc6b3af5db0b0ee0038b8860d0a.gif

查看所有权限

  • 提供页面的Servlet
//得到所有的权限PrivilegeService privilegeService = new PrivilegeService();List list = privilegeService.getAllPrivileges();request.setAttribute("list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值