2012-07-19 67 views
3

我有index.gsp提供了一个页面。在该页面中有一个注册按钮和一个登录按钮。登录后,如果登录成功,应用程序会再次驱动您登录到index.gsp。我需要,如果用户登录,这些按钮消失,而是说“你好,[用户名]”。我试过这个代码,但它不工作(这是从来没有登录):如何知道用户是否登录(在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中(不完全,只有一块事项):

<sec:ifNotLoggedIn> 

<div id="buttons"> 
    <div id="login"><a href="loginurl">Login</a> 
    </div> 
    <div id="register"><a href="registerurl">Registrarse</a> 
    </div> 
</div> 
</sec:ifNotLoggedIn> 
<sec:ifLoggedIn> 

<div id="greet">Hello!</div> 

</sec:ifLoggedIn> 

任何帮助,将不胜感激。

谢谢。

回答

11

它看起来像你正在做自己的认证,而不是通过春季安全认证过程。 <sec:ifLoggedIn>标签依靠处理认证的弹簧安全性。

这是在春季安全应用程序中处理的通常方式是将登录请求发布到/j_spring_security_check,后者在后台被UsernamePasswordAuthenticationFilter过滤。

Grails和spring安全插件通过提供可用作起点的LoginControllerauth.gsp,使得它相对无痛。运行s2-quickstart脚本(该脚本还会创建用户和角色域对象),或者仅从spring-security-core模板目录复制它们。

+0

是否有'<秒:ifLoggedIn>的其他标签'? – styl3r 2017-10-07 09:41:59

0

终于做到了简单

<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> 

更容易,我想。但是,谢谢你的回答,阿泰勒。

0

我想它只是

<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn> 
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn> 
相关问题