【问题标题】:Redirect automatically in a view在视图中自动重定向
【发布时间】:2015-04-23 13:56:23
【问题描述】:

我正在使用 Grails 2.3.3。如果存在特定条件,是否有更好的方法可以自动从视图重定向到另一个控制器/操作,否则继续显示视图 - 而不是在操作本身中执行此操作?

我要做的是在显示视图之前检查我是否已登录,如果没有则自动重定向到登录页面而无需任何用户干预。

如果我可以在视图中执行此操作,则很容易将此登录检查代码添加到 _header.gsp 以影响所有页面。这比必须为每个感兴趣的视图编写每个动作的代码要快得多。

【问题讨论】:

  • 做某事做其他事 ...但这可能是错误的处理方式-看看过滤器...github.com/vahidhedayati/kchat看看这里,我已经解释了如何扩展过滤器-这将是grails2,因为不确定但不要'认为 grails 3.0.X 目前不支持过滤器

标签: grails grails-2.3


【解决方案1】:

是的,您可以在 Grails 自定义 taglib 的帮助下通过吐出 javascript 代码来完成,如果您未登录,该代码会将页面重定向到不同的 URL。但这会降低那些将使用您的产品的用户的用户体验,因为您首先呈现到此页面,然后使用 Javascript,将它们重定向回登录屏幕(如果未登录)。

我会向您推荐另外三个解决方案:

  1. 使用 Grails 的 filters 保护您对经过身份验证的用户的操作,
  2. 您可以使用自定义 Java 注释通过编写一些代码来自动保护操作,
  3. 要跳过以上所有两种解决方案,您可以使用一个广泛使用的 Grails 身份验证插件,名为 spring security core 插件,它提供了最好和简单的身份验证机制,并使用了后台的核心 Spring Java 库。整合一个巨大而令人敬畏的东西。

【讨论】:

  • 感谢所有这些建议。我遇到的是 beforeInterceptor 活动,它使您能够在查看之前通过拦截器操作传递控制器的所有操作。
  • 不得不重做此评论 - 无法编辑.....感谢所有这些建议。我遇到的是 beforeInterceptor 功能,它使您能够在查看之前通过拦截器操作传递控制器的所有操作。它使我能够进行检查,例如对所有操作进行登录检查,或者可以过滤特定操作 - 例如检查用户是否具有显示特定视图的特定权限。使用此功能是否有任何问题我应该注意,例如它在我使用 grail 2.3.3 的更高版本中被弃用?
【解决方案2】:

就像在您的 GSP 中定义一个简单的基于 JS 的重定向一样简单,或者在共享模板中甚至更好:

<sec:ifNotLoggedIn> 
   <g:javascript>
     document.observe( 'dom:loaded', function(){
       document.location = '${createLink( controller:'login', action:'doLogin' )}';
     } );
   </g:javascript>
</sec:ifNotLoggedIn> 

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2013-04-04
    • 2018-06-12
    相关资源
    最近更新 更多