spring - 在Grails中使用Spring Security限制内容访问

标签 spring grails spring-security

让我再次开始,说我还是Grails和Spring Security的新手。我一直在尽力筛选文档,示例和示例。这一切使我有些困惑或不知所措。

我正在尝试使用Spring来管理用户对信息的访问。我有一个陷害的网站。我希望管理员能够添加人员,与人员连接的位置以及位置的图像。图片已连接到该人。我希望登录的人只能看到他们的图片。

使用sec标签或@Secure批注或二者结合使用是更好还是最佳实践?哪个最安全?我使用sec:tags限制了访问。我可以使用sec:tag选择要显示的图片吗?

最佳答案

我认为您可以以更简单的方式看待这个问题。基本的插件安装基本上有3种管理安全性的方法。

  • @Secured-这使您可以锁定对整个Controller和/或单个 Action 的访问。可以将其视为将URL锁定到一组特定角色。更改此安全级别将需要重新部署。
  • 请求图-您获得与@Secured相同的好处,并具有额外的好处,即能够在运行的环境中修改Controller / action安全性,而不必重新部署。
  • sec标签-通过这些标签,您可以锁定 View 的呈现。例如,允许一个角色显示一个编辑按钮,而另一角色隐藏它。 sec标签与以上方法结合使用。

  • 基本上就是这样。以上任何一个都不比另一个安全。某些人似乎感到困惑的是“我的数据”的概念以及Spring Security如何处理它。如果在Controller中希望用户只能访问其“图片”,则应仅基于已认证的用户查询“图片”。
    def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
    def pictures = Picture.findAllByUser(authenticatedUser)
    

    然后, View 仅在乎您发送给它的图片。每个登录的用户将只看到他们的图片。如果管理员已登录,并且需要查看所有图片,则可以执行以下操作:
    def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
    if (SpringSecurityUtils.ifAllGranted("ROLE_ADMIN")) {
       def pictures = Pictures.list() 
    }
    

    但是,出于管理目的,我可能只有一个单独的Controller,而不是尝试在一个Controller中执行过多的逻辑。或者,将逻辑移至服务。

    希望这可以帮助。

    关于spring - 在Grails中使用Spring Security限制内容访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307538/

    相关文章:

    grails - Grails:在g:actionSubmit上单击继承参数

    spring - 如何在我的Spring 4.0 RestFul Web服务上实现Spring Security?

    Grails 数据绑定(bind) - 如何排除子属性

    java - Spring-Security:MySQL JDBC 身份验证失败

    spring-security - springSecurityService.principal 在 tomcat 8.5 中作为 WAR 部署时返回 Null

    java - 传输不适用于在java中发送smtp电子邮件

    java - Spring - 我的 Autowiring 有什么问题?

    java - 子类实现上的@Required注解

    java - Acegi/Spring 安全支持 getUserPrincipal() 吗?

    grails - Grails:使用两个数据库(一个使用域类创建,另一个是现有的数据库)