gpt4 book ai didi

web-services - 如何使用Spring Security保护Grails Web服务

转载 作者:行者123 更新时间:2023-12-02 14:50:57 25 4
gpt4 key购买 nike

假设我有以下Domain类:

import grails.rest.Resource
@Resource(formats=['json'], uri='/api/book')
class Book {
String name
static belongsTo = [user: User]
}

我已经在Config.groovy中定义了spring安全拦截UrlMap来限制URL访问:
'/api/book':                      ['ROLE_USER']

假设系统中有两本书和两个用户,标识为1的本书属于用户1,第二本书属于用户2。用户1已登录,以下请求应返回本书1(这样做):
localhost:8080/myapp/api/book/1

但是如果同一用户请求以下资源:
localhost:8080/myapp/api/book/2

我希望其余的API返回一个空数组或“访问被拒绝”。我该如何实现?我需要一种处理所有请求类型的方法,即处理GET / POST / PUT / DELETE。

最佳答案

通过生成相应的Web服务 Controller 来解决此问题:

grails generate-controller Book

并增加了对每个操作的限制,即索引,显示,保存,更新,删除。

例如,用于获取资源的Show操作:
localhost:8080/myapp/api/book/1

更改为如下代码:
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional

@Transactional(readOnly = true)
class BookController {

def springSecurityService
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

Code omitted...

def show(Book bookInstance) {
if(bookInstance == null){
notFound()
return
}
def user = springSecurityService.currentUser
if(bookInstance.user.id == user.id) {
respond bookInstance
return
}
notFound()
}

Code omitted...
}

Grails版本:2.4.4

关于web-services - 如何使用Spring Security保护Grails Web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29625325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com