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

北京做网站的大公司/自助建站系统下载

北京做网站的大公司,自助建站系统下载,有没有人一起做网站,香港免费空间申请解决方案: 先直接说下解决方案,权限点设计成如下: /api/books/{id:\d*}问题描述: 获取书本详情的标准restful路由,一般是这样的/api/books/12, 12即该book的id,如果需要拥有访问该路由的权限…

解决方案:

先直接说下解决方案,权限点设计成如下:

/api/books/{id:\d*}

问题描述:

获取书本详情的标准restful路由,一般是这样的/api/books/12, 12即该book的id,如果需要拥有访问该路由的权限,一般可以这样设计/api/books/*

但是如果类似有一个获取书本封面的请求,比如:/api/books/getCover,那么如果给了/api/books/*这样的权限的话,getCover这个也可以请求成功,就无法区分了。


源码分析:

请求地址和权限点匹配判断代码:

if(antPathMatcher.match(permission.getRequestUrl(),requestUri)){...
}

匹配代码的源码如下:
在这里插入图片描述那我们来分析下matchStrings 这个方法

private boolean matchStrings(String pattern, String str,@Nullable Map<String, String> uriTemplateVariables) {return getStringMatcher(pattern).matchStrings(str, uriTemplateVariables);
}

接下来看下getStringMatcher

protected AntPathStringMatcher getStringMatcher(String pattern) {AntPathStringMatcher matcher = null;Boolean cachePatterns = this.cachePatterns;if (cachePatterns == null || cachePatterns.booleanValue()) {matcher = this.stringMatcherCache.get(pattern);}if (matcher == null) {matcher = new AntPathStringMatcher(pattern, this.caseSensitive);if (cachePatterns == null && this.stringMatcherCache.size() >= CACHE_TURNOFF_THRESHOLD) {// Try to adapt to the runtime situation that we're encountering:// There are obviously too many different patterns coming in here...// So let's turn off the cache since the patterns are unlikely to be reoccurring.deactivatePatternCache();return matcher;}if (cachePatterns == null || cachePatterns.booleanValue()) {this.stringMatcherCache.put(pattern, matcher);}}return matcher;
}

接下来看AntPathStringMatcher的构造函数:

public AntPathStringMatcher(String pattern, boolean caseSensitive) {this.rawPattern = pattern;this.caseSensitive = caseSensitive;StringBuilder patternBuilder = new StringBuilder();Matcher matcher = GLOB_PATTERN.matcher(pattern);int end = 0;while (matcher.find()) {patternBuilder.append(quote(pattern, end, matcher.start()));String match = matcher.group();if ("?".equals(match)) {patternBuilder.append('.');}else if ("*".equals(match)) {patternBuilder.append(".*");}else if (match.startsWith("{") && match.endsWith("}")) {int colonIdx = match.indexOf(':');if (colonIdx == -1) {patternBuilder.append(DEFAULT_VARIABLE_PATTERN);this.variableNames.add(matcher.group(1));}else {String variablePattern = match.substring(colonIdx + 1, match.length() - 1);patternBuilder.append('(');patternBuilder.append(variablePattern);patternBuilder.append(')');String variableName = match.substring(1, colonIdx);this.variableNames.add(variableName);}}end = matcher.end();}// No glob pattern was found, this is an exact String matchif (end == 0) {this.exactMatch = true;this.pattern = null;}else {this.exactMatch = false;patternBuilder.append(quote(pattern, end, pattern.length()));this.pattern = Pattern.compile(patternBuilder.toString(),Pattern.DOTALL | (this.caseSensitive ? 0 : Pattern.CASE_INSENSITIVE));}
}

看到这里基本上也就明白了,这里如果设定的*号,这匹配的是.*,那参考这里

else if (match.startsWith("{") && match.endsWith("}")) {

我们把获取详情的权限点设计成

/api/books/{id:\d*}

这样就可以匹配/api/books/12或者/api/books/123之类的详情,又不会包含/api/books/getCover这样的接口。

http://www.jmfq.cn/news/4807423.html

相关文章:

  • 怎么做网站数据库/关键词歌词
  • 猎头公司简介/学seo的培训学校
  • 网络广告策划流程/成都网站建设seo
  • 自建网站免费教程/企业网络推广平台
  • 湘潭做网站问下磐石网络/外贸平台
  • 广州做韩国网站/万物识别扫一扫
  • 淘宝api 做网站/代写平台在哪找
  • 做网站和优化共多少钱/网络营销顾问工作内容
  • 南宁怎么做网站/从哪里找网络推广公司
  • 深圳建设网站公/可口可乐网络营销策划方案
  • 网站的倒计时怎么做/网站推荐
  • 做网站优化好的网络公司/百度提问登录入口
  • 一级a做爰视频安全网站/谷歌推广优化
  • 中国做网站知名的公司/免费数据统计网站
  • 静态网站转成动态网站/长尾关键词挖掘精灵官网
  • 做算法题的网站/优化方案的格式及范文
  • 济南商城网站建设公司/惠州网络营销公司
  • 怎样进行网站建设/营销模式有哪些 新型
  • 教育行业网站开发/网络营销运营方案
  • 河北企业建网站/2024年阳性什么症状
  • 服务器怎样做网站呢/长沙网站seo分析
  • 江阴招聘网站建设学徒/浏览器老是出现站长工具
  • wordpress默认登录界面/seo营销方法
  • 自助建站编辑器/网站优化效果
  • 网站开发需要提供哪些东西/厦门关键词优化报价
  • 企业专业网站建设/网络营销成功的案例
  • 毕业设计代做网站web/石家庄热搜
  • 村建站属于哪个部门/比较好的品牌策划公司有哪些
  • 网站建设设计服务/微信营销是什么
  • 站长之家特效网站/河南it渠道网