如何使用正则表达式来为SpringMVC的拦截器设置拦截URI

如何使用正则表达式来为SpringMVC的拦截器设置拦截URI
  • 需求来源:由于员工的操作权限限制将从前后端同时限制,对无权访问的用户,既不告知访问地址(前端),也在其访问对应地址时拦截请求(后端)。为保证后端拦截的完备性,需要对下述地址进行拦截:"^/employee/\\d+$"
  • 这一正则表达式很好理解,自己来写正则表达式的判断也很简单,但疑难点在于:
    • 疑难点1:不明确SpringMVC的拦截器配置是否支持正则表达式书写
    • 疑难点2:如果支持,具体形式是什么

因此,我们需要深入源码,去查查看SpringMVC做URI匹配的代码,其实现的逻辑是什么。在层层深入后,我们定位到了PathMatcher.class文件,然后在查询了相关的PathMatcher文档后,我们对其内含方法有了了解:

public interface PathMatcher {
    // 判断path是否是一个模式字符串(一般含有指定风格的特殊通配符就算是模式了)
    boolean isPattern(String var1);
	// 采用Ant风格的路径匹配
    boolean match(String var1, String var2);
	// 判断path是否和模式pattern前缀匹配(前缀匹配:path的前缀匹配上patter了即可,当然全部匹配也是可以的)
    boolean matchStart(String var1, String var2);
	// 返回和pattern模式真正匹配上的那部分字符串
    String extractPathWithinPattern(String var1, String var2);
	// 提取path中模板变量
    Map<String, String> extractUriTemplateVariables(String var1, String var2);
	// 路径比较器,用于排序确定优先级高低
    Comparator<String> getPatternComparator(String var1);
	// 合并两个pattern模式,组合算法由具体实现自由决定
    String combine(String var1, String var2);
}

match采用Ant风格,根据查询到的资料,Ant风格包括四个部分:

  • “?”: 匹配任意一个字符
  • “*”: 匹配任意数量字符
  • “**”: 匹配任意层级的URI路径/目录
  • {PatchVariable: 正则表达式}: 匹配满足正则表达式限制下的PatchVariable

至此,我们对于疑难点的疑问得到解答:

  • SpringMVC采用Ant风格匹配URI,该风格支持正则表达式
  • {PatchVariable: 正则表达式}是该风格下正则表达式的匹配格式

因此,常规的正则表达式"^/employee/\\d+$"改为"/employee/{id:\\d+}"即可满足限定要求

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值