e997878756894a9e9c4563fb6bcf19c5b3fc676f.svn-base 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package org.jeecg.common.util;
  2. import java.util.Collection;
  3. import java.util.Map;
  4. import org.springframework.util.AntPathMatcher;
  5. /**
  6. * 使用Spring自身提供的地址匹配工具匹配URL
  7. */
  8. public class PathMatcherUtil {
  9. public static void main(String[] args) {
  10. String url = "/sys/dict/loadDictOrderByValue/tree,s2,2";
  11. String p = "/sys/dict/loadDictOrderByValue/*";
  12. System.out.println(PathMatcherUtil.match(p,url));
  13. }
  14. /**
  15. * 实际验证路径匹配权限
  16. *
  17. * @param matchPath 权限url
  18. * @param path 访问路径
  19. * @return 是否拥有权限
  20. */
  21. public static boolean match(String matchPath, String path) {
  22. SpringAntMatcher springAntMatcher = new SpringAntMatcher(matchPath, true);
  23. return springAntMatcher.matches(path);
  24. }
  25. /**
  26. * 实际验证路径匹配权限
  27. *
  28. * @param list 权限url
  29. * @param path 访问路径
  30. * @return 是否拥有权限
  31. */
  32. public static boolean matches(Collection<String> list, String path) {
  33. for (String s : list) {
  34. SpringAntMatcher springAntMatcher = new SpringAntMatcher(s, true);
  35. if (springAntMatcher.matches(path)) {
  36. return true;
  37. }
  38. }
  39. return false;
  40. }
  41. /**
  42. * 地址表达式匹配工具
  43. */
  44. private static class SpringAntMatcher implements Matcher {
  45. private final AntPathMatcher antMatcher;
  46. private final String pattern;
  47. private SpringAntMatcher(String pattern, boolean caseSensitive) {
  48. this.pattern = pattern;
  49. this.antMatcher = createMatcher(caseSensitive);
  50. }
  51. @Override
  52. public boolean matches(String path) {
  53. return this.antMatcher.match(this.pattern, path);
  54. }
  55. @Override
  56. public Map<String, String> extractUriTemplateVariables(String path) {
  57. return this.antMatcher.extractUriTemplateVariables(this.pattern, path);
  58. }
  59. private static AntPathMatcher createMatcher(boolean caseSensitive) {
  60. AntPathMatcher matcher = new AntPathMatcher();
  61. matcher.setTrimTokens(false);
  62. matcher.setCaseSensitive(caseSensitive);
  63. return matcher;
  64. }
  65. }
  66. private interface Matcher {
  67. boolean matches(String var1);
  68. Map<String, String> extractUriTemplateVariables(String var1);
  69. }
  70. }