Grails gsp:渲染gsp页面后有没有办法中止?

时间:2018-04-18 21:20:24

标签: grails error-handling http-status-code-403 gsp

是否有一种方法可以从gsp页面(或类型库)中止html页面生成并回调控制器方法输出403标题?

我们有一组脚手架页面,我们用于管理页面,并修改它们以测试访问该页面的用户是否具有管理员权限。如果不是,我们生成一个html页面,指示“不是管理员消息”(而不是页面的正常脚手架代码,即edit.gsp)。这里的问题是http响应是200,我真的希望响应状态代码是403。

与域对象关联的控制器是空的,除了启用脚手架并且我们已生成脚手架页面(通过grails generate-view cmd)我们还修改了这些页面以测试用户是否为管理员。

所以我的问题归结为一次在gsp页面中我们如何中止并调用另一个控制器来生成403错误标题?有没有办法可以从gsp页面执行此操作,或者我们是否必须定义与视图页面名称匹配的控制器方法,并在控制器方法中测试用户是否为管理员,然后发出403错误?

更喜欢一种方法来中止当前gsp页面的生成,并能够调用另一个控制器来生成403标题。

1 个答案:

答案 0 :(得分:0)

我相信你最好的方法是使用拦截器或过滤器。我打算提供一个例子,但这里已经有很好的例子:https://grails.github.io/grails2-doc/2.4.4/guide/theWebLayer.html#interceptorshttps://grails.github.io/grails2-doc/2.4.4/guide/single.html#filters

基本上,任何一个代码都将在执行控制器操作之前(或之后,但在您的情况下:之前)执行。您可以访问参数,会话等,这样您就可以执行逻辑,例如"这个人是管理员吗?#34;。您也可以修改响应,这样您就可以重定向到"权限被拒绝"页面或将状态设置为403或您需要做的任何事情。