这是场景。我有两个对象Users
(带有用户名/密码)和UserInfo
,其余数据与用户有关。 Users
是具有数千条记录的旧表,而UserInfo
是相当新的表。我希望在用户首次登录时获得尽可能多的UserInfo
。
我想在首次登录后强制用户进入自定义屏幕,并要求UserInfo
数据。在新屏幕中获得“必需”数据后,我不会显示它,直到用户自愿要在“配置文件”下填写数据。
由于应用程序有多个入口点,因此我不想更新所有 Controller 以进行检查。
有没有办法我可以使用Spring Security filter
或成功登录后执行的操作?我看了看ApplicationListener<AuthenticationSuccessEvent>
,但是它不能解决问题,就好像我将链接复制粘贴到浏览器中一样,它使我可以直接到达目的地而无需询问“额外信息”。
简而言之,我希望在每次登录后进行检查,如果失败,则不允许用户进入该应用程序。无论他如何尝试进入。
最佳答案
在您的Config.groovy
中,配置Spring Security的defaultTargetUrl
并告诉它始终重定向到那里:
grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/userInfo/edit'
在
UserInfoController
的编辑操作中,您可以检查是否存在必填字段(也许是userInfo.validate()
?),如果存在,则重定向至任意位置,也许是'/',否则将呈现编辑信息 View 。
关于authentication - 成功验证后,Grails Spring Security会强制用户进入特定屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848668/