为什么一个安全过滤器阻止在Spring MVC-security app中执行另一个?

时间:2015-09-28 20:17:39

标签: spring-mvc spring-security spring-rest

我是Spring Security模块的新手。我想知道两个安全过滤器之间的区别是什么?

let urlString = "http://instagram.com/p/1JiWygQUSu/media/?size=l"
let request: NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string:urlString)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 15.0)
request.HTTPMethod = "HEAD"
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {
    (response, data, error) in
    print("instaResponse \(response?.URL)")
})

似乎第一个安全过滤器阻塞执行第二个过滤器,因为当我执行/ newapi / user / data / 7897896时,只有第一个安全过滤器被清除,但是我预计会执行第二个安全过滤器。谁能告诉我为什么会这样,以及我们如何解决这些问题?

仅供参考 - 我们拥有非常庞大/庞大的Web应用程序,其中定义了近150多个安全过滤器,因此调试此类安全相关问题变得非常困难。任何Spring Security专家都可以在这里提出您的想法吗?

1 个答案:

答案 0 :(得分:0)

<intercept-url>规则从上到下应用。因此,这个新的应该放在原始的之前,否则它将被/ **路径的广泛范围蚀,这就是你的第二个安全过滤器没有执行的原因。您需要更改下面的序列

<security:intercept-url method="GET" pattern="/newapi/user/*/*" access="hasRole('ROLE_USER,'BIG_ADMIN')" />
<security:intercept-url method="GET" pattern="/newapi/user/**" access="hasRole('ROLE_USER','LOW_ADMIN')" />