Как узнать, вошел ли пользователь в систему (в GSP)

У меня есть 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>

Любая помощь будет оценена по достоинству.

Спасибо.


person Fustigador    schedule 19.07.2012    source источник


Ответы (3)


Похоже, вы выполняете собственную аутентификацию, а не проходите процесс аутентификации безопасности spring. Тег <sec:ifLoggedIn> полагается на безопасность Spring, обрабатывающую аутентификацию.

Обычный способ обработки этого в весеннем приложении безопасности — отправка запроса на вход в /j_spring_security_check, который за кулисами фильтруется UsernamePasswordAuthenticationFilter.

Grails и подключаемый модуль безопасности Spring делают это относительно безболезненным, предоставляя LoginController и auth.gsp, которые можно использовать в качестве отправной точки. Запустите скрипт s2-quickstart (который также создает объекты домена пользователя и роли) или просто скопируйте их из каталога шаблонов spring-security-core.

person ataylor    schedule 19.07.2012
comment
Есть ли тег else для <sec:ifLoggedIn>? - person styl3r; 07.10.2017
comment
@ styl3r Я не думаю, что есть тег else. Просто используйте отрицательный тег <sec:ifNotLoggedIn>. - person David Ferenczy Rogožan; 15.07.2019

я пробовал просто

<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
person asroboy    schedule 18.01.2018

В итоге сделал просто

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

person Fustigador    schedule 20.07.2012