博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH实现一个简单的权限控制实例(三)
阅读量:6139 次
发布时间:2019-06-21

本文共 1750 字,大约阅读时间需要 5 分钟。

  hot3.png

最简单的权限验证方式代码:

 

public class RightsUtils {	public static boolean testRight(String menuId, String[] rights) {		for(String right : rights) {			if(menuId.equals(right)) {				return true;			}		}		return false;	}}通过判断数据库中的权限是否包含了给定的url,也就是菜单的ID.

上文已经有了struts的自定义拦截器,用来拦截未登录的用户,拦截的方法是auth,编写auth用来处理用户的菜单权限:

@Component @Scope("prototype")public class AuthAction extends ActionSupport {	@Resource	private RoleService roleService;	@SuppressWarnings("unchecked")	public String authCheck() {		User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user");		String rights = user.getRights();		Integer roleId = user.getRoleId();		Role role = roleService.findById(roleId);		rights += "," + role.getRights();		if(rights != null) {			String[] rightsArray = rights.split(",");			List
list = new ArrayList
(); for (int i=0; i
menuList = (List
) ServletActionContext.getRequest().getSession().getAttribute("menuList"); for(Menu menu : menuList) { menu.setHasMenu(RightsUtils.testRight(menu.getMenuId().toString(), rightsArray)); for(Menu submenu : menu.getSubMenu()) { submenu.setHasMenu(RightsUtils.testRight(submenu.getMenuId().toString(), rightsArray)); } } } return SUCCESS; }}

这样,就会根据用户所属角色和自身拥有的权限来展示给不同用户不同的界面可操作信息.

在菜单表中插入一些数据:

132038_FMFA_2861620.png

在角色表中插入几条测试数据:

131840_OfD2_2861620.png

用户表中也插入几条测试数据分别属于三种角色中的一种:

131912_l1wC_2861620.png

然后登录不同的用户:

管理员:

132012_qgne_2861620.png

user1:

132138_YilX_2861620.png

可以看到已经能够正确的过滤掉一些菜单.

当然这个方法是很不好的,还有一种验证菜单权限的方法:

public class RightsHelper {	/**	 * 利用BigInteger对权限进行2的权的和计算	 * @param rights int型权限编码数组	 * @return 2的权的和	 */	public static BigInteger sumRights(int[] rights){		BigInteger num = new BigInteger("0");		for(int i=0; i

用菜单的Id进行2的权和来实现.

这样,基本就能实现一个最基本的权限控制.

转载于:https://my.oschina.net/kkdo/blog/732399

你可能感兴趣的文章
Javascript的if判断
查看>>
spring cloud gateway 源码解析(3)记录请求参数及返回的json
查看>>
阿里云ECS数据盘格式化与挂载图文教程
查看>>
Flexbox响应式网页布局 - W3Schools视频02
查看>>
【手牵手】搭建前端组件库(二)
查看>>
怎么给视频添加音频或配乐
查看>>
怎么转换音乐格式
查看>>
Leaflet-Develop-Guide
查看>>
每隔1s打印0-5
查看>>
Angular6错误 Service: No provider for Renderer2
查看>>
聊聊flink的BlobStoreService
查看>>
洗牌算法具体指的是什么?
查看>>
HBuilder打包手机app的方法
查看>>
解决Mac下SSH闲时自动中断的问题
查看>>
在JavaScript中理解策略模式
查看>>
ArchSummit 深圳 2017 成功举办,探索未来互联网架构
查看>>
不知道如何提升深度学习性能?我们为你整理了这份速查清单
查看>>
Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈
查看>>
技术绩效考量:你们可能都做错了
查看>>
“亲切照料”下的领域驱动设计
查看>>