基础型权限系统的设计实现,不该看的你无权看哦!

本文介绍了如何设计和实现一个基础的Java权限控制系统,包括功能需求、技术实现、测试评估和存在的问题。讨论了手撸与使用第三方框架的优缺点,并推荐了Spring Security和Apache Shiro作为权限系统框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术背景

在Java应用程序中,权限控制是一个重要的安全机制,它可以限制用户对系统资源的访问权限,从而保护系统数据的安全。

功能需求

我们希望设计一个Java权限控制系统,该系统能够满足以下功能需求:

  • 能够定义权限并将其分配给用户和角色。
  • 能够控制用户和角色对系统资源的访问权限。
  • 能够对用户和角色进行管理,包括创建、修改和删除。
  • 能够实现灵活的权限控制策略

技术实现

该类是一个接口,用于定义业务对象的公共方法和属性。

package com.qcmb.java.auth.entity;

/**
 * 业务对象
 */
public interface Bo {}

该类是一个实体类,用于表示权限。它包含一个属性url,表示资源的位置(唯一)。

package com.qcmb.java.auth.entity;

import com.qcmb.java.auth.SecuritySingleton;
import com.qcmb.java.auth.security.PermissionSecurity;
import com.qcmb.java.auth.security.Security;

import java.util.regex.Pattern;

/**
 * 权限实体
 */
public class Permission implements Bo{
    /**
     * 资源位置(唯一)
     */
    private String url;

    public String getUrl() {
        return this.url;
    }

    /**
     * 这个正则表达式可以匹配以下URL:
     * www.google.com
     * aa.bb.com/a1/b2
     * aa.bb.com/a1/b2?q=java
     * aa.bb.com/a1/b2#section1
     * 它不能匹配以下URL:
     * http://www.google.com
     * www.example.com/index.html
     * example.com:8080
     */
    //这个正则表达式不能匹配包含协议头的 URL。
    private static final String regex = "^[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,6}(/[a-zA-Z0-9\\-\\.]+)*$";

    public Permission(String url){
        //检查输入的 URL 是否有效
        //这个正则表达式只能匹配简单的 URL。它不能匹配包含特殊字符或空格的 URL。

        if (!Pattern.matches(regex, url)) {
            // 处理无效的 URL
            this.url = null;
        }else {
            this.url = url;
        }
    }
    public Permission(String url,PermissionSecurity permissionSecurity){
        this(url);
        //注册到集合里,以便在其它地方也可以使用。
        SecuritySingleton.reg(permissionSecurity);
        //一些简单的安全措施
        Security permissionSecurityInstance = SecuritySingleton.getInstance(permissionSecurity.getClass());
        boolean b = permissionSecurityInstance.isSecurity(this);
        if (!b){
            this.url = null;
        }
    }
}

该类是一个实体类,用于表示角色。它包含一个属性id,表示角色的唯一标识。它还包含一个属性permissions,表示角色对应的权限集合。

package com.qcmb.java.auth.entity;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 角色实体
 */
public class Role implements Bo {
    /**
     * 角色唯一标识
     */
    protected String id;

    public String getId() {
        return id;
    }

    /**
     * 角色对应的权限集合,一个角色可以有多个权限
     */
    protected final Map<String,Permission> permissions = new ConcurrentHashMap<>();

    /**
     * 某个url和Permission对象的映射
     */
    public Permission getPermissionByUrl(String url){
        return permissions.get(url);
    }

    /**
     * 可通过当前角色得到该角色的所有权限
     */
    public List<Permission> getPermissions(){
        Collection<Permission> values = permissions.values();
        if (values.isEmpty()){
            return null;
        }else {
            return new ArrayList<>(values);
        }
    }

    /**
     * 添加或者更改权限,可通过此方法给用户分配权限
     */
    public void addPermiss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值