Можно ли отображать различные виды входа в систему при использовании плагина Grails Spring Security? - PullRequest
0 голосов
/ 19 октября 2011

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

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

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

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

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

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

1 Ответ

0 голосов
/ 20 октября 2011

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

...