有没有办法从gsp页面(或类型库)中止html页面生成,并回调控制器方法以输出403标头?
我们有一组脚手架页面,用于我们的管理页面,并已修改它们,以测试访问该页面的用户是否具有管理权限。如果不是,我们生成一个html页面,指示“不是管理员消息”(而不是页面的正常搭建代码,即edit.gsp)。这里的问题是http响应是200,而我真的希望响应状态码是403。
除了启用scaffolding外,与域对象关联的控制器是空的,我们已经生成了scaffolding页面(通过grails generate-view cmd),我们还修改了这些页面以测试用户是否为管理员。
因此,我的问题归结为gsp页面中的一次,我们如何中止并调用另一个控制器来生成403错误头?我们有没有办法在gsp页面中做到这一点,或者我们是否必须定义与视图页面名称匹配的控制器方法,并在控制器方法中测试用户是否为管理员,然后发出403错误?
我希望有一种方法可以中止当前gsp页面的生成,并能够调用不同的控制器来生成403标头。
发布于 2018-04-19 22:34:20
我相信你在这里最好的方法是使用拦截器或过滤器。我本打算提供一个例子,但这里已经有了非常好的例子:https://grails.github.io/grails2-doc/2.4.4/guide/theWebLayer.html#interceptors和https://grails.github.io/grails2-doc/2.4.4/guide/single.html#filters
基本上,这两种方法都是在执行控制器操作之前(或之后,但在您的示例中:在此之前)执行的代码。您可以访问params、session等,因此可以执行类似于“这个人是管理员吗”的逻辑。你也可以修改响应,这样你就可以重定向到“权限被拒绝”的页面,或者将状态设置为403,或者做任何你需要做的事情。
https://stackoverflow.com/questions/49909179
复制相似问题