Spring Security intercept url

其典型用法是在配置文件的Bean中定义:

   
       
           
               

           

       

   

但由于我们新使用了RESTful的url,所以上面的配置无法验证“/books”这样的url。

 

[尝试一]

把pattern修改成了"/books*”,希望它可以拦截所有以“books”开头的url。

但结果发现它只拦截“/books”或者“/booksa”,而不会拦截“/books/1”。

 

究其原因,是path-type采用Ant方式。所以“*”只能匹配任意多个字符,但是对分隔符“/”无效。

 

[尝试二]

既然采用了Ant匹配方式,写就比较容易了。但是犹豫程序部署及测试时间较长,于是写了一个快速的单元测试:

Java代码   收藏代码
  1. import org.springframework.util.AntPathMatcher;  
  2. import java.util.Arrays;  
  3.   
  4. public class QuickTest {  
  5.     public static void main(String[] args) {  
  6.         AntPathMatcher matcher = new AntPathMatcher();  
  7.         String[] pattern = {"/em*""/em**""/em/*""/em/**""/em/**/*"};  
  8.         String[] str = {"/em""/ems""/em/a""/em/a/b""/em/a/b/c/"};  
  9.         for (String s : str) {  
  10.             for (String p : pattern) {  
  11.                 System.out.println("result:" + matcher.match(p, s));  
  12.             }  
  13.         }  
  14.     }  
  15. }  
 

经过测试,结果如下:

 /book/books/books/a/books/a/b/books/a/b/c
EXPECTEDfalsetruetruetruetrue
/books*falsetruefalsefalsefalse
/books**falsetruefalsefalsefalse
/books/*falsefalsetruefalsefalse
/books/**falsetruetruetruetrue
/books/**/*falsefalsetruetruetrue

 

根据与期望的结果比较,知道正确的模式是“/books/**”


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部