我将基于([User< - > Role< - > Right])模型实现自定义授权,并且应将权限与控制器和方法名称进行比较(例如“controller | method”)
我使用自定义UserDetails和AuthenticationProvider来调整授予的权限(here),但是作为已检查的源代码和文档,关于如何自定义权限比较,我发现有一个过滤器SecurityContextHolderAwareRequestWrapper),它实现了isGranted和isUserInRole比较权限,而文件说使用AccessDecisionManager选民来定制(据我所知)。应该使用哪一个?我有控制器和方法(动作)名称来比较权限吗?
我对Spring的安全性感到困惑。是否还有其他资源,而不是官方文档,说明它是如何工作的,我的意思是行动和方法的序列以及如何定制它们。
答案 0 :(得分:11)
有几种方法:
基于角色
可以实现基于角色的安全机制,实现UserDetailsService接口并配置spring security以使用此类。
要了解如何实现这样的项目,请查看以下教程:
简而言之,Spring安全性在幕后执行以下操作:
为了更好地理解这些类的内部工作原理,您可以阅读javadoc:
<强> SpeI位强>
SPEL使您无需检查权限,也可以检查用户的其他属性。 您可以在URL模式中使用这些,但也可以使用@Preauthorize注释方法。 这样可以减少对业务层的保护。
基于ACL
基于ACL的模型是在spring security 3.0中引入的,但效果不佳documented。 他们的建议是查看Contacts XML example,因为这个使用了新的acl组件。
上次this book包含有关如何进一步自定义安全愿望的很好示例。