2011-04-29 80 views
0

我在放置和方法级别具有网址级安全性。但是,一旦用户在url级别进行了身份验证,我的方法级安全性就会被绕过!我看着这个进一步,似乎以下网址级别的安全性:春季安全3:方法级别访问失败

intercept-url pattern="/**" access="ROLE_USER"

将覆盖任何我的方法的安全级别(如下面的代码片段)。

@PreAuthorize("hasRole('ROLE_SUPERVISOR')") 
public String supervisorRoleOnly() 
{ 
    return "success!!!" ; 
} 

我认为这个方法会抛出一个访问被拒绝的错误,但没有,一旦他们在URL级别已完成认证的任何ROLE_USER可以访问此方法。

我有这在我的security-config.xml

<global-method-security pre-post-annotations="enabled" > 
    <expression-handler ref="expressionHandler"/> 
</global-method-security> 

我缺少什么?

回答

0

我想这更适用于未来的读者,但是当你设置调试日志记录的Spring Security你看到类似以下内容:

Looking for Pre/Post annotations for method 'supervisorRoleOnly' on target class 'yourClassName' 
No expression annotations found 
Adding security method [CacheKey[yourClassName; public yourReturnType yourClassName.supervisorRoleOnly()]] with attributes [ROLE_USER] 

预授权很可能被忽略。