【发布时间】:2018-04-18 21:20:24
【问题描述】:
有没有办法从 gsp 页面(或类型库)中止 html 页面生成并回调控制器方法以输出 403 标头?
我们有一组用于管理页面的脚手架页面,并对其进行了修改以测试访问该页面的用户是否具有管理员权限。如果不是,我们会生成一个指示“不是管理员消息”的 html 页面(而不是页面的正常脚手架代码,即 edit.gsp)。这里的问题是http响应是200,我真的希望响应状态码是403。
与域对象关联的控制器是空的,除了启用脚手架,我们已经生成了脚手架页面(通过 grails generate-view cmd),我们还修改了这些页面以测试用户是否是管理员。
所以我的问题归结为 gsp 页面中的一次,我们如何中止并调用另一个控制器来生成 403 错误标头?有没有办法我们可以从 gsp 页面执行此操作,或者我们是否必须定义与视图页面名称匹配的控制器方法,并在控制器方法中测试用户是否是管理员,然后发出 403 错误?
希望有一种方法可以中止当前 gsp 页面的生成,并能够调用不同的控制器来生成 403 标头。
【问题讨论】:
-
为什么不在控制器操作中测试而不是在渲染 gsp 时进行测试?这样你就可以更好地处理这种情况了。
-
我同意,我继承的代码有一个域对象的控制器,但没有方法。控制器只是将脚手架设置为域类的名称和一组生成的 CRUD 视图。我不知道是否可以在控制器中添加和更新方法(例如)并让它呈现更新视图。这对我们来说将是很多工作(我们有超过 100 个域对象)。希望 gsp 指令或一种可以通过类型库调用实现的方式。
-
根据您的 grails 版本,您可以创建一个 beforeInterceptor 闭包或类(我认为是 3.0.9 和更早版本的闭包?以后的类),它将在它匹配的每个操作之前运行。如果您让我们知道您使用的是哪个版本的 Grails,我相信我或其他人可以帮助向您展示如何做到这一点。
-
谢谢。我们正在使用 grails 2.4.0(我知道希望我们可以更新)。
标签: grails error-handling http-status-code-403 gsp