【发布时间】:2016-10-15 14:02:45
【问题描述】:
我是 Grails 的新手,所以可能我做错了什么,但也许你可以帮我弄清楚。所以我有这个简单的 Grails 应用程序,我认为 Spring Security 插件运行良好。问题是,在 GSP 页面上 Spring Security 标签没有显示我期望的信息,示例场景:
我有
/basket/placeOrder端点安全,所以当我从浏览器点击它时,它会显示我的登录页面。我使用正确的凭据登录,它会将我转发到预期页面(因此看起来身份验证成功)
- 当我使用我的一个控制器时
println springSecurityService.currentUser.email它在控制台上打印正确的数据。 -
然后我尝试在 GSP 上使用例如:
< sec:ifNotLoggedIn> NOT LOGGED < /sec:ifNotLoggedIn>它显示
NOT LOGGED。如果我尝试使用例如<sec:loggedInUserInfo field="email" />检索一些用户信息,则相同,它不会显示任何字符串。就像 Spring Security 不绑定 GSP 一样。
我做错了什么?缺少一些配置? 谢谢。
编辑
当我查看 SecurityTagLib ifNotLoggedIn 函数时,它使用 springSecurityService.isLoggedIn()。当我从控制器调用它时,它会返回预期的结果。当我在控制器和 GSP 中打印 session 时,都是一样的:
SPRING_SECURITY_CONTEXT = org.springframework.security.core.context.SecurityContextImpl@46b66c80: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@46b66c80: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@611913a: Username: kamil; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@43458: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: AAB2217ABEE7EAF752573D44914B0005; Granted Authorities: ROLE_ADMIN
我设法在调试时运行我的应用程序,但它变得更加奇怪。首先,我在控制器上的断点显示 SpringSecurityService 对象,它的值 currentUser 设置正确。然后,相同的请求仍然在处理我在SecurityTagLib 中设置的断点(grails 只是跟随流控制器-> 渲染),它具有相同的 SpringSecurityService 对象(这意味着它是同一个 bean,没有重复等)但它只是丢失所有用户数据。奇怪!
肯定有问题,但不知道是什么...
【问题讨论】:
标签: grails spring-security gsp