Можно ли отображать разные представления входа при использовании подключаемого модуля Grails Spring Security

Я работаю над приложением Grails, у которого есть два веб-сайта: обычный «настольный» сайт и мобильный сайт, где все презентации выполняются с помощью jQuery Mobile. Чтобы различать эти сайты, я использую контроллеры Grails по умолчанию для обычного сайта, и у меня есть собственный «мобильный» контроллер для всех мобильных страниц и действий. Плагин Grails Spring Security используется для обработки всей аутентификации и авторизации.

Все идет нормально. Но вот моя проблема. На ограниченных страницах / действиях плагин безопасности автоматически перехватывает вызов (когда пользователь не аутентифицирован должным образом) и перенаправляет на страницу входа. Однако я хочу использовать две разные страницы: одну для обычного сайта и одну для мобильного сайта. Я не могу придумать хороший способ определить, в каком «контексте» находится пользователь («контекст» - обычный или мобильный).

Мое быстрое и грязное решение: если пользователь сначала переходит на мобильную страницу без ограничений, я помещаю маркер «мобильный сеанс» в объект сеанса. В контроллере входа я ищу этот маркер и устанавливаю представление на страницу мобильного входа. Вот так:

    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]
}

Это, конечно, не работает, если первая страница, на которую переходит пользователь, является страницей с ограниченным доступом.

Я надеюсь, что кто-нибудь сможет мне помочь с этим. Одно «ограничение» на решение: я не думаю, что стоит проверять пользовательский агент для определения контекста (обычный сайт будет / должен работать на любом устройстве); Я бы предпочел определять контекст на основе запроса, являющегося действием мобильного контроллера.


person Pieter van Gent    schedule 19.10.2011    source источник


Ответы (1)


Когда Spring Security перенаправляет вас к действию auth, он вставляет исходный URI в сеанс. Если вы можете определить, является ли страница мобильной по URI, вы можете выбрать представление на основе этого. Он будет доступен по адресу session.SPRING_SECURITY_SAVED_REQUEST_KEY.requestURI.

person ataylor    schedule 19.10.2011