前言

  目前最流行的两大安全框架:SpringSecruity、Shiro

  权限控制,无非就是:前端控件是否可见、是否允许请求/访问URL

  本文分享一个简单的URL访问权限校验,支持/、/*、/**等情况

  代码

package cn.huanzi.qch.baseadmin.util;/**
* 一个简单的URL访问权限校验工具类
*/
public class UrlSecurityUtil { /**
* 检查requestUri是否包含在urls中
*/
public static boolean checkUrl(String requestUri,String[] urls){
//对/进行特殊处理
if("/".equals(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[]{"/b/b1","/c/*","/d/**"}); //满足其中一种情况,就允许访问
String[] urlz = {
"/",
"/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",
}
}

  万丈高楼平地起,有了这些基础,一套权限管理系统也就不远了

一个简单的URL访问权限校验的更多相关文章

  1. 用Lua控制Nginx静态文件的url访问权限

    需求背景:比如我们有一个存储文件的web服务器,一般通过url可直接访问到:http://127.0.0.1/uploads/test.rar,如果我们需要限制别人的访问,可以通过添加lua脚本来控制 ...

  2. Android 在 SElinux下 如何获得对一个内核节点的访问权限【转】

    本文转载自:https://blog.csdn.net/wh_19910525/article/details/45170755 Android 5.0下,因为采取了SEAndroid/SElinux ...

  3. 利用JS跨域做一个简单的页面访问统计系统

    其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们 ...

  4. Android 在 SElinux下 如何获得对一个内核节点的访问权限

    点击打开链接 Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问. 本文将以用户自定义的 ...

  5. Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限

    -9]* u:object_r:tty_device:s0 # We add here /dev/wf_bt              u:object_r:wf_bt_device:s0 wf_bt ...

  6. 使用 Suricata 进行入侵监控(一个简单小例子访问百度)

    前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 1.自己编写一条规则,规则书写参考snort规则(suricata ...

  7. 一个简单的以User权限启动外部应用程序(用NetUserAdd函数和USER_INFO_1结构体动态添加用户,然后用CreateProcessWithLogonW启动程序)

    版权声明:本文为博主原创文章,未经博主允许不得转载. BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lp ...

  8. 一个简单的以User权限启动外部应用程序

    BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lpszApplication, LPCWSTR lpsz ...

  9. spring security实现简单的url权限拦截

    在一个系统中,权限的拦截是很常见的事情,通常情况下我们都是基于url进行拦截.那么在spring security中应该怎么配置呢. 大致步骤如下: 1.用户登录成功后我们需要拿到用户所拥有的权限,并 ...

随机推荐

  1. GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-19475)

    影响范围 Ghostscript 9.24之前版本 将POC作为图片上传,执行命令,抓包 POST /index.php HTTP/1.1 Host: target Accept-Encoding: ...

  2. Mybatis学习笔记-日志

    日志工厂 如果一个数据库操作出现异常,在排错时,则需要日志 SLF4J Apache Commons Logging(COMMONS_LOGGING) LOG4J LOG4J2 JDK logging ...

  3. azure删除ns时一直处于terminating状态

    写个脚本 #!/bin/bash NAMESPACE=corekubectl proxy &kubectl get namespace $NAMESPACE -o json |jq '.spe ...

  4. Java流程控制03——选择结构

    选择结构 if单语句结构 我们很多时候要去判断一个东西是否可行,然后我们才去执行,这样一个过程我们用if语句来表示 语法  if(布尔表达式){ //如果布尔表达式结果为true将执行的语句 } if ...

  5. 接口管理效率神器Apifox

    前言 你是一个测试,你们团队目前开发模式是前后端分离. 某一天,版本V1.0接口评审完,发布在了swagger上,前后端各自进行开发.此时你根据接口文档将新接口迁移到JMeter上,然后开始编写接口测 ...

  6. 超详细Java基础-多态

    茫茫人海千千万万,感谢这一秒你看到这里.希望我的能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! Java基础知识(多态) 多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该 ...

  7. 雪花算法ID在前端丢失精度解决方案

    首先说一下背景,目前笔者的工作是物联网方面的,设备有对应的智慧运营平台,平台开发中建表的主键用的是Mybatis plus默认的雪花算法来生成的,也就是分布式系统比较常用的雪花ID,技术栈就是常用的S ...

  8. Spring Security项目的搭建以及Spring Security的BCrypt加密

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  9. Create Shortcut to Get Jar File Meta Information

    You have to get meta information of cobertura.jar with command "unzip -q -c cobertura.jar META- ...

  10. 使用 C# 下载文件的十八般武艺

    文件下载是一个软件开发中的常见需求.本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案.并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 H ...