使用Grails Spring安全插件时,是否可以显示不同的登录视图

使用Grails Spring安全插件时,是否可以显示不同的登录视图,grails,spring-security,grails-plugin,Grails,Spring Security,Grails Plugin,我正在开发一个Grails应用程序,它有两个网站:一个是常规的“桌面”网站,另一个是使用jQuery mobile完成所有演示的移动网站。为了区分这些站点,我对常规站点使用默认的Grails控制器,并且对所有移动页面和操作使用自定义的“移动”控制器。GrailsSpring安全插件用于处理所有身份验证和授权内容 到目前为止还不错。但这是我的问题。在受限页面/操作上,安全插件自动拦截调用(当用户未正确验证时),并重定向到登录页面。但是,我想使用两个不同的页面:一个用于常规站点,另一个用于移动站点。

我正在开发一个Grails应用程序,它有两个网站:一个是常规的“桌面”网站,另一个是使用jQuery mobile完成所有演示的移动网站。为了区分这些站点,我对常规站点使用默认的Grails控制器,并且对所有移动页面和操作使用自定义的“移动”控制器。GrailsSpring安全插件用于处理所有身份验证和授权内容

到目前为止还不错。但这是我的问题。在受限页面/操作上,安全插件自动拦截调用(当用户未正确验证时),并重定向到登录页面。但是,我想使用两个不同的页面:一个用于常规站点,另一个用于移动站点。我想不出一个好方法来确定用户在哪个“上下文”中(“上下文”是常规的还是移动的)

迄今为止,我的快速脏解决方案是:如果用户首先进入移动非限制页面,我会在会话对象中放置一个标记“mobilesession”。在登录控制器中,我查找该标记,并将视图设置为移动登录页面。像这样:

    def auth = {

    def config = SpringSecurityUtils.securityConfig

    if (springSecurityService.isLoggedIn()) {
        redirect uri: config.successHandler.defaultTargetUrl
        return
    }

    String view = 'auth'
    if (session.mob) {
        log.debug "we're in a mobile session; reset view"
        view = 'mauth'
    }

    String postUrl = "${request.contextPath}${config.apf.filterProcessesUrl}"

    render view: view, model: [postUrl: postUrl,
                               rememberMeParameter: config.rememberMe.parameter]
}
当然,如果用户导航到的第一个页面是受限制的页面,那么这不起作用


我希望有人能帮我做这件事。解决方案的一个“限制”:我认为检查用户代理以确定上下文不是一个好主意(常规站点将/必须在任何设备上工作);我更愿意根据移动控制器的操作请求来确定上下文。

当spring security将您重定向到auth操作时,它会将原始URI填充到会话中。如果可以从URI确定页面是否是移动的,则可以基于此选择视图。它将在
会话中可用。SPRING\u SECURITY\u SAVED\u REQUEST\u KEY.requestURI