我有放置的url级安全性,以及方法级别。但是,一旦用户在网址级别进行了身份验证,我的方法级别安全性就会被绕过!我进一步看了这个,似乎是以下网址级别的安全性:
intercept-url pattern="/**" access="ROLE_USER"
会覆盖我的任何方法级安全性(如下面的代码段)。
@PreAuthorize("hasRole('ROLE_SUPERVISOR')")
public String supervisorRoleOnly()
{
return "success!!!" ;
}
我认为这种方法会抛出一个拒绝访问的错误,但是没有,任何ROLE_USER都可以在url级别进行身份验证后访问此方法。
我在security-config.xml
:
<global-method-security pre-post-annotations="enabled" >
<expression-handler ref="expressionHandler"/>
</global-method-security>
我错过了什么?
答案 0 :(得分: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]
PreAuthorize可能被忽略了。