上述技术都不再有效。似乎Spring已经竭尽全力阻止用户覆盖SecurityExpressionRoot。
EDIT 11/19/14 设置弹簧以使用安全注释:
<beans ... xmlns:sec="http://www.springframework.org/schema/security" ... >
...
<sec:global-method-security pre-post-annotations="enabled" />
创建一个像这样:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(String key) {
return true;
}
}
然后在你的jsp中做这样的事情:
<sec:authorize access="@mySecurityService.hasPermission('special')">
<input type="button" value="Special Button" />
</sec:authorize>
或者为方法添加注释:
@PreAuthorize("@mySecurityService.hasPermission('special')")
public void doSpecialStuff() { ... }
此外,您可以在注释中使用Spring表达式语言来访问当前的身份验证以及方法参数。@PreAuthorize
例如:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(Authentication authentication, String foo) { ... }
}
然后更新 您的以匹配新方法签名:@PreAuthorize
@PreAuthorize("@mySecurityService.hasPermission(authentication, #foo)")
public void doSpecialStuff(String foo) { ... }