我是 Spring Security 框架的新手。我只是在编译使用 Spring Security 注释或 Spring Security 框架添加安全功能的各种方法。
到目前为止找到了以下内容。
- 整页授权
示例:
<intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
页内授权
示例:
<security:authorize access="hasRole('ROLE_ADMIN')">
方法级别授权 -
@PreAuthorize,@PostAuthorize,@PreFilter,@PostFilter
我不确定这是否是确保应用程序安全的详尽列表。需要一些帮助。谢谢。
此外,我正在寻找易于实现和配置的安全功能 - 开发人员犯错误的可能性较小,同时实现所需的安全目标。看起来注释易于使用且不那么模糊。注释仅用于方法级别授权吗? Spring Security是否提供可用于保护应用程序其他部分的注释,并且这些注释可以传递参数来配置权限或特权吗?
我希望我的问题不是太宽泛。任何编辑或有用的评论将不胜感激。
最佳答案
也许您需要首先确定域模型的要求、什么被视为敏感数据、什么不是以及如何访问这些数据(HTML/JSP 与 REST/JSON 与直接 Java 调用)。然后根据需要使用授权功能。您的列表几乎包含了大多数应用程序所需要的内容,但要获得更精细、更高级的授权机制,请查看 Spring 的 ACL:
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/domain-acls.html
您可能想自己回答的另一个重要问题是哪个应用程序层将负责执行您的安全性:MVC/REST 与服务(将这个问题分散到多个层通常是个坏主意)。这将直接决定您要做出的 SS 功能选择。
您可能希望在 SS 注释之上构建自己的注释,以密切反射(reflect)您的特定领域。这样,所有复杂性都将集中在一个地方,从而减少出错的空间。
例如,您可以创建自定义注释,例如 @AuthorizedFor
,您可以在其中添加各种特定于域的参数。然后,您可以使用 SS 注释之一来注释此注释,例如 @Pre/PostAuthorize("hasAnyRole()")
(在这里您还可以使用 Spring 的 native EL 来进一步自定义行为)并使用自定义Pre/PostIncationAuthorizationAdvice
的实现,您可以在其中根据自定义注释参数做出授权决策。这里的额外优势是,您将能够使用自定义注释来保护完整的类,而不必注释该类中的所有方法。在您的实现中,您可以获取 MethodInitation
实例,您可以从中询问包含该方法的类并查看其是否已注释,然后继续执行,就好像该方法本身已注释一样。
请参阅这篇文章以进行更深入的讨论:http://blog.novoj.net/2012/03/27/combining-custom-annotations-for-securing-methods-with-spring-security/
关于java - 使用 Spring Security 框架实现安全性的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752868/