5

我有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 中(不完整,只有重要的部分):

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

任何帮助,将不胜感激。

谢谢你。

4

3 回答 3

13

看起来您是在进行自己的身份验证,而不是通过 spring 安全身份验证过程。该<sec:ifLoggedIn>标签依赖于处理身份验证的弹簧安全性。

在 Spring Security 应用程序中处理这种情况的常用方法是将登录请求发布到/j_spring_security_check,在幕后,由UsernamePasswordAuthenticationFilter过滤。

Grails 和 spring 安全插件通过提供一个LoginControllerauth.gsp你可以用作起点的方式使这变得相对轻松。运行s2-quickstart脚本(它还创建用户和角色域对象),或者只是从spring-security-core模板目录中复制它们。

于 2012-07-19T15:23:21.057 回答
1

我简单地试了一下

<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
于 2018-01-18T06:13:08.507 回答
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>

更容易,我想。但是,谢谢你的回答,ataylor。

于 2012-07-20T07:58:57.467 回答