Grails 如何知道用户是否已登录(在GSP中)

Grails 如何知道用户是否已登录(在GSP中),grails,spring-security,gsp,Grails,Spring Security,Gsp,我有一个显示页面的index.gsp。在该页面中有一个注册按钮和一个登录按钮。登录后,如果登录正常,应用程序将再次驱动您进入index.gsp。我需要的是,如果用户登录,这些按钮就会消失,而是说“你好,[用户名]”。我尝试过使用此代码,但不起作用(从未登录): 在控制器中: def dologin(){ def user=Usuario.findByUsernameAndPassword(params.username,springSecurityService.encodePassw

我有一个显示页面的
index.gsp
。在该页面中有一个注册按钮和一个登录按钮。登录后,如果登录正常,应用程序将再次驱动您进入
index.gsp
。我需要的是,如果用户登录,这些按钮就会消失,而是说“你好,[用户名]”。我尝试过使用此代码,但不起作用(从未登录):

在控制器中:

def dologin(){

    def user=Usuario.findByUsernameAndPassword(params.username,springSecurityService.encodePassword(params.password) )

    if(user){
        redirect (controller:'usuario', action:'index')
    }else{

        flash.message=message(code:'default.user.not.found', args:[message(code: 'params.username', default:'Usuario'), params.id])
    def userlogged = springSecurityService.getCurrentUser()
                render view: 'index', model: [user: user]
}

}
在index.gsp中(不是完整的,只有重要的部分):


你好
任何帮助都将不胜感激


谢谢。

看起来您正在进行自己的身份验证,而不是通过spring安全身份验证过程。
标记依赖于spring security处理身份验证

在spring security应用程序中处理这一问题的通常方法是将登录请求发布到
/j_spring_security_check
,在幕后,它会被一个过滤器过滤

Grails和spring安全插件通过提供一个
LoginController
auth.gsp
作为起点,使这一点相对轻松。运行
s2快速启动
脚本(它还创建用户和角色域对象),或者从
spring security core
templates目录中复制它们。

最后简单地完成了

<g:if test="${session.user==null}">
<!-- Display buttons-->
</g:if>
<g:if test=${session.user!=null">
    <div id="greet"> Hello, ${session.user.username}!</div>
</g:if>
<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>

我只是简单地试了一下

<g:if test="${session.user==null}">
<!-- Display buttons-->
</g:if>
<g:if test=${session.user!=null">
    <div id="greet"> Hello, ${session.user.username}!</div>
</g:if>
<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
//做点什么
//干坏事

是否有else标记?@styl3r我认为没有else标记。只需使用否定标记