我有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>
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分:11)
看起来您正在进行自己的身份验证,而不是通过Spring安全身份验证过程。 <sec:ifLoggedIn>
标记依赖于处理身份验证的Spring安全性。
在春季安全应用中处理这种情况的常用方法是将登录请求发布到/j_spring_security_check
,在LoginController
之后,auth.gsp
会过滤该登录请求。
Grails和spring安全插件通过提供可用作起点的s2-quickstart
和spring-security-core
使这相对无痛。运行{{1}}脚本(也创建用户和角色域对象),或者只从{{1}}模板目录中复制它们。
答案 1 :(得分:1)
我只是试了一下
<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
答案 2 :(得分: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。