我在我的 Grails 应用程序中集成了 Spring 安全核心插件。
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/user/home"
这是我在成功登录后设置默认主页所做的。但我想根据用户角色有不同的主页
目前我有 2 个用户角色 1)"ROLE_ADMIN" 2)"ROLE_USER"
我将如何实现这一点?
我在我的 Grails 应用程序中集成了 Spring 安全核心插件。
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/user/home"
这是我在成功登录后设置默认主页所做的。但我想根据用户角色有不同的主页
目前我有 2 个用户角色 1)"ROLE_ADMIN" 2)"ROLE_USER"
我将如何实现这一点?
一种快速的方法是在控制器操作中执行逻辑。例如,home
动作可以根据角色呈现不同的视图,例如:
import grails.plugin.springsecurity.annotation.Secured
class UserController {
def home() {
String view
if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
view = 'admin'
}
else if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
view = 'user'
}
else {
// ???
}
render view: view, model: [...]
}
}
如果你想在不同的控制器之间分配逻辑,你可以根据角色重定向:
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
class UserController {
def home() {
if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
redirect controller: '...', action: '...'
return
}
if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
redirect controller: '...', action: '...'
return
}
// ???
}
}
您也可以配置身份验证成功处理程序,它将根据角色将用户重定向到特定控制器。
class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
LinkGenerator linkGenerator
private static final ADMIN_ROLE = 'ROLE_Admin'
@Override
protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {
if(SpringSecurityUtils.ifAllGranted(ADMIN_ROLE)) {
return linkGenerator.link(controller: 'admin', action: "index")
}
return super.determineTargetUrl(request, response);
}
}