Grails 在视图中自动重定向

Grails 在视图中自动重定向,grails,grails-2.3,Grails,Grails 2.3,我正在使用Grails2.3.3。如果存在特定条件,是否有更好的方法从视图自动重定向到另一个控制器/操作,否则继续显示视图,而不是在操作本身中执行此操作 我要做的是在显示视图之前,我要检查我是否已登录,如果没有,则在没有任何用户干预的情况下自动重定向到登录页面 如果我可以在视图中执行此操作,则可以很容易地将此登录检查代码添加到_header.gsp中,以影响所有页面。这比为每个感兴趣的视图编写每个操作的代码要快得多。是的,您可以借助Grails自定义标记库的帮助,通过编写javascript代码

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

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


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

是的,您可以借助Grails自定义标记库的帮助,通过编写javascript代码将页面重定向到不同的URL(如果您未登录)。但这将减少那些将使用您的产品的用户体验,因为您首先呈现到此页面,然后使用Javascript,您会将他们重定向回登录屏幕(如果未登录)

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

  • 使用Grails为经过身份验证的用户保护您的操作
  • 您可以通过编写一些代码,使用自定义Java注释自动保护操作
  • 要跳过以上两个解决方案,您可以使用一个广泛使用的Grails认证插件plugin,它提供了最好、简单的认证机制,并在幕后使用了核心springjava库,这反过来又是一个需要集成的巨大而了不起的东西

  • 在GSP中定义一个简单的基于JS的重定向非常简单,在共享模板中甚至更好:

    <sec:ifNotLoggedIn> 
       <g:javascript>
         document.observe( 'dom:loaded', function(){
           document.location = '${createLink( controller:'login', action:'doLogin' )}';
         } );
       </g:javascript>
    </sec:ifNotLoggedIn> 
    
    
    document.observe('dom:loaded',function()){
    document.location='${createLink(控制器:'login',操作:'doLogin')}';
    } );
    
    做点什么做点别的。。。但这可能是错误的做法-看看过滤器。。。看看这里,我已经解释了如何扩展过滤器——这将是grails2,因为Grails3.0.XThanks目前不确定但不认为过滤器是受支持的。我遇到的是beforeInterceptor festure,它使您能够在查看之前通过interceptor操作传递控制器的所有操作。必须重做此注释-无法编辑。。。。。谢谢你的建议。我遇到的是beforeInterceptor特性,它使您能够在查看之前通过interceptor动作传递控制器的所有动作。它使我能够进行检查,例如对所有操作进行登录检查,或者可以对特定操作进行筛选,例如检查用户是否具有显示特定视图的特定权限。使用此功能时是否有任何问题需要注意,例如在我使用Grail2.3.3的更高版本中它被弃用?