当前位置: 首页 > news >正文

三明市网站建设做申诉资料网站

三明市网站建设,做申诉资料网站,关于学院网站建设的通知,wordpress官方空间Java解决垂直鉴权问题(对垂直权限进行校验) 文章目录 Java解决垂直鉴权问题(对垂直权限进行校验)前言一、垂直鉴权是什么?二、实现过程1.新建接口权限菜单映射表2.项目初始化时加载接口菜单映射关系3.自定义过滤器拦截…

Java解决垂直鉴权问题(对垂直权限进行校验)


文章目录

  • Java解决垂直鉴权问题(对垂直权限进行校验)
  • 前言
  • 一、垂直鉴权是什么?
  • 二、实现过程
    • 1.新建接口权限菜单映射表
    • 2.项目初始化时加载接口菜单映射关系
    • 3.自定义过滤器拦截器


前言

避免垂直鉴权实现原理:每次用户访问时,都要判定该用户是否有访问此 URL 的权限。


一、垂直鉴权是什么?

垂直权限漏洞是指Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜到了其他页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。

垂直权限的漏洞举例:Web应用程序在服务端没有做权限控制,只是在前端菜单显示上将部分页面隐藏了。此时,恶意用户可以猜测其他管理页面的 URL,就可以访问或控制其他角色拥有的数据或页面,达到越权操作的目的,可能会使得普通用户拥有了管理员的权限。

二、实现过程

1.新建接口权限菜单映射表

在这里插入图片描述

/*** <p>* 接口权限映射表* </p>*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("ed_interface_mapping")
public class InterfaceMapping implements Serializable {private static final long serialVersionUID = 1L;/*** 主键id*/@TableId(value = "id", type = IdType.AUTO)private Integer id;/*** 接口路径*/@TableField("interface_path")private String interfacePath;/*** 对应权限菜单*/@TableField("permission")private String permission;
}

2.项目初始化时加载接口菜单映射关系


@Slf4j
@Component
@RequiredArgsConstructor
public class VerticalPermissionHandle {//应用上下文,Web应用程序的基本URL路径@Value("${server.servlet.context-path}")private String contextPath;private final InterfaceMappingService interfaceMappingService;private Map<String, List<String>> map;/*** 项目初始化时加载接口菜单映射关系*/@PostConstructpublic void init() {log.info("============================加载权限开始==================================");//查询出所有的接口菜单映射关系List<InterfaceMapping> interfaceMappings = interfaceMappingService.list();if (ObjectUtil.isEmpty(interfaceMappings)) {throw new BizException(ResultEnum.ERROR.getCode(), "启动失败,未加载垂直权限关系");}this.map = new HashMap<>();/*** key为接口url* value为菜单(防止出现相同的接口url在多个权限菜单中出现(这种情况可能性很小),这里使用list存储菜单)*/interfaceMappings.stream().forEach(data -> {String key = contextPath + data.getInterfacePath();List<String> value;if (map.containsKey(key)) {value = map.get(key);} else {value = new ArrayList<>();}value.add(data.getPermission());map.put(key, value);});log.info("============================加载权限结束==================================");}public List<String> verticalPermission(String path) {List<String> result = map.get(path);if (ObjectUtil.isEmpty(result)) {return new ArrayList<>();}return result;}
}

3.自定义过滤器拦截器

/*** 自定义单点登录过滤器* 注:CheckFilter类为自己写的过滤器,与此业务无关* doCheck也是自定义的过滤器方法,可忽略* 具体业务逻辑如下已实现*/
@Slf4j
public class SsoFilter extends CheckFilter {@Overrideprotected boolean doCheck(HttpServletRequest request, HttpServletResponse response) throws IOException {String uri = request.getRequestURI();String token = request.getHeader("token");if (!verticalPermissionCheck(uri, token)) {log.info(" [当前访问接口uri] : {} ", uri);//用来接口返回,提示前端(可加可不加)response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Headers", "token, Accept, Origin, X-Requested-With, Content-Type, Last-Modified");response.setContentType("application/json;charset=utf-8");ObjectMapper objectMapper = new ObjectMapper();ServletOutputStream writer = response.getOutputStream();writer.write(objectMapper.writeValueAsBytes("当前用户暂无该权限"));writer.flush();writer.close();return false;}else {return true;}}/*** 判断url所对应的菜单是否存在于登录用户的权限菜单中,* 存在则为true,不存在则为false* @param uri 用户访问的uri* @param token 登录的token* @return*/private boolean verticalPermissionCheck(String uri, String token) {List<String> permissions = verticalPermissionHandle.verticalPermission(uri);if (ObjectUtil.isEmpty(permissions)){return true;}/*** 在redis中获取用户信息* 其中用户信息包含这个角色所对应的permission菜单* 遍历根据url这个key获取的value菜单,如果存在这个角色所对应的菜单中,则放行*/User userByToken = UserUtils.getUserByToken(token);for (String permission : permissions) {if (userByToken.getAllPermissionString().contains(permission)) {return true;}}return false;}

http://www.yayakq.cn/news/837213/

相关文章:

  • 网站建设和挂标情况清理表网页传奇公益服
  • 公司做完网站怎么搜不到在线平面设计软件免费版
  • 如何把做的网站发布到网上设计logo网站推荐
  • 多语言网站模板建网页软件
  • 做网站的保证承诺腾讯云服务器怎么登录
  • 网站注册qq长沙做网站价格
  • 淘宝电子网站建设论文电器企业网站建设
  • 自己做的网站邮箱更改密码程序为什么总出错263邮箱企业邮箱入口
  • 淄博网站排名公司在网上做网站
  • 网站做竞价经常会被攻击吗wordpress后台网址
  • 爱最好网站建设道德建设 网站
  • 公司备案证查询网站查询北京市住房与城乡建设厅网站
  • 网站建设服务便宜广州做外贸网站的公司
  • 无锡建网站价格网站快速收录提交
  • 网站怎么做收费太原建站模板
  • 电子商务网站建设心得怎么样可以做网站充值代理
  • 网站建设技能培训五指山住房建设局网站
  • 营销软件网站国内三大电商平台分析报告
  • 做网站公司赚钱吗jsp ajax网站开发典型实例pdf
  • 建设个人网银网站计算机网络培训课程
  • 吉林省 网站建设国内可访问的海外网站和应用
  • 如何做分类网站信息营销郴州市地图全图
  • 酒店做爰视频网站php网站开发用什么软件
  • 做公司网站的南宁公司手机app设计网站
  • 网站建设专业网站设计公司物格网网站建设要什么软件
  • 网站建设实施进度与资源管理手机查询wordpress分类id
  • 网站建设方案图建设网站的企业有哪些
  • 网站报价书百度seo竞价推广是什么
  • 响应式布局网站开发网页设计代码大全div
  • 政务公开与网站建设建设局上班时间