龙空技术网

一个简单的URL访问权限校验

风后奇门柳坤生 464

前言:

如今朋友们对“html打开url”可能比较关切,咱们都需要学习一些“html打开url”的相关知识。那么小编也在网摘上网罗了一些有关“html打开url””的相关内容,希望我们能喜欢,咱们快快来了解一下吧!

  前言

  安全框架,我们一般都会直接使用目前最流行的两大安全框架:SpringSecruity、Shiro,但是有时候我们只想使用一些简单的、底层的权限控制,不想要那么多拦截器/过滤器,这时候就需要一个简单的权限校验工具了

  权限控制,无非就是:前端控件是否可见、是否允许请求/访问URL,本文分享一个简单的URL访问权限校验,支持/、/*、/*/a、/**等情况

  代码

package cn.huanzi.qch.util;import java.util.Arrays;/** * 一个简单的URL访问权限校验工具类 */public class UrlSecurityUtil {    /**     * 检查requestUri是否包含在urls中     */    public static boolean checkUrl(String requestUri,String[] urls){        //对/进行特殊处理        if("/".equals(requestUri) && !Arrays.asList(urls).contains(requestUri)){            return false;        }        String[] requestUris = requestUri.split("/");        for (int i = 0; i < urls.length; i++) {            if(check(requestUris,urls[i].split("/"))){                return true;            }        }        return false;    }    private static boolean check(String[] requestUris,String[] urls){        for (int i1 = 0; i1 < requestUris.length; i1++) {            //判断长度            if (i1 >= urls.length){                return false;            }            //处理/*、/**情况            if("**".equals(urls[i1])){                return true;            }            if("*".equals(urls[i1])){                continue;            }            //处理带后缀            if(requestUris[i1].contains(".") && urls[i1].contains(".")){                String[] split = requestUris[i1].split("\\.");                String[] split2 = urls[i1].split("\\.");                // *.后缀的情况                if("*".equals(split2[0]) && split[1].equals(split2[1])){                    return true;                }            }            //不相等            if(!requestUris[i1].equals(urls[i1])){                return false;            }        }        return true;    }}
  测试、效果
    public static void main(String[] args) {        //无需权限即可访问的URL        String[] urls = {"/a/js/*.js","/a/img/**"};        //给用户配置的URL访问权限        HashMap<Object, Object> user = new HashMap<>();        user.put("username","张三");        user.put("urls",new String[]{"/","/a/css/*/common.css","/b/b1","/c/*","/d/**"});        //满足其中一种情况,就允许访问        String[] urlz = {                "/",                "/a/css/a/common.css",                "/a/css/a/a1/common.css",                "/a/js/layui.js",                "/a/js/layui.css",                "/a/img/a/a.jpg",                "/a/img/a1.png",                "/b/b1",                "/b/b2",                "/c/c1",                "/c/c1/c2",                "/d/d1/d2",        };        for (String url : urlz) {            boolean flag = UrlSecurityUtil.checkUrl(url,urls) ||                    UrlSecurityUtil.checkUrl(url,(String[])user.get("urls"));            System.out.println(url+","+(flag ? "允许访问!" : "无权访问..."));        }    }
  后记

  有了基础的URL权限控制后,可以配置成一个权限key对应多个URL,然后把权限key配给用户:

{    "ROLE_SA":{        "/a/a1",        "/b/*",    },    "ROLE_USER":{        "/c/c1",        "/d/*",    }}

  有了权限key基础后,可以配置成一个角色对应多个权限key,然后把角色配给用户:

{    "部门经理":{        "ROLE_SA",        "ROLE_USER",    },    "普通员工":{        "ROLE_USER",    }}

  万丈高楼平地起,在这些基础,可以进阶一套我们自己的安全框架!

版权声明

作者:huanzi-qch

出处:

若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.

标签: #html打开url