我目前正在使用 liferay portlet。 Spring Security 用于渲染层(在 jsp 页面中)。但是,它并不安全,因为我的调度 Controller 和服务没有任何安全/授权检查。
在我的应用程序中,Spring-MVC Controller 接收请求,并传递给服务层。服务层构建结果并将其传递给 JSP 页面。在 jsp 页面中,我们使用 spring-security taglibs 进行安全授权。
我想知道以下内容:
- 关于实现 portlet 授权的最佳实践。
- 在 Dispatch 层或 Service 层实现安全性哪个更好?
- 调度层或服务层如何实现安全?
请考虑我的应用程序基于用例的安全性。
谢谢!
最佳答案
我最喜欢的答案在这里匹配:“视情况而定”。
这是它所依赖的:
Liferay 默认为 *LocalService 没有任何权限检查 - 例如如果你有权访问 API,你就可以做任何你想做的事。然而,远程服务应该在将服务的实际执行委托(delegate)给本地服务之前检查权限。
如果您想使用 Liferay 的 permissionChecker(它很容易获得并且运行时可配置),您应该在非本地服务方法中执行此操作。我倾向于推荐这个,因为你可以利用 Liferay's permissioning system - 无论如何,您已经拥有由 Liferay 管理的用户身份、角色、成员资格等。创建一个自定义角色,授予自定义权限,您就可以在运行时配置所有内容。
其次,虽然您肯定想在后端服务中检查权限,但您可能想在 UI 层再次执行此操作:如果不允许用户操作某个对象,则您不想显示提示他们可以更改它的按钮,只会得到“权限被拒绝”的回复。
也就是说,我从未将 Spring Security(尤其是标签库)与 Liferay 的权限系统联系起来。
关于spring-mvc - 使用 spring security 保护 liferay portlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401616/