Alexander Vasilenko (Alexander Vasilenko) wrote in ru_grails,
Alexander Vasilenko
Alexander Vasilenko
ru_grails

GRAILS: spring-security-core plugin and locale

Всем привет!
Решил прибегнуть к помощи студии )) тк уже второй день бьюсь безрезультатно...

Работаю над мультиязычным(интернациональным) пректом и язык (локализация) используется в качестве первого параметра URI. Кроме того, вопрос возникает при интеграции со Spring Security Core Plugin. Но об этом дальше...

Итак, URLs:

http://domain.com:8080/app/en/controller/action/id
http://domain.com:8080/app/de/controller/action/id
http://domain.com:8080/app/fr/controller/action/id

Здесь мой UrlMappings.groovy:


class UrlMappings {

static mappings = {

    name login:    "/$lang/login/$action"    { controller = 'login' }
    name logout:   "/$lang/logout/$action"   { controller = 'logout' }
    name register: "/$lang/register/$action" { controller = 'register' }

    "/$lang/$controller/$action?/$id?" {
        constraints {
        }
    }

    name index: "/$lang" { controller = 'index' }
    "/" { controller = 'index' }

    "500" { controller = 'errors' }
}
}

Здесь LanguageFilters.groovy

class LanguageFilters {

def filters = {
    languageCheck(controller: '*', action: '*') {
        before = {
            if (params.lang == null) {
                redirect controller: params.controller, action: params.action,
                         params: ['lang': request.locale.language.toString()] + params
           
}
        }
    }
}
}

Здесь Config.groovy:

grails.plugins.springsecurity.failureHandler.defaultFailureUrl = "/$lang/login/authfail?login_error=1"
grails.plugins.springsecurity.failureHandler.ajaxAuthFailUrl = "/$lang/login/authfail?ajax=true"
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/$lang"
grails.plugins.springsecurity.successHandler.ajaxSuccessUrl = "/$lang/login/ajaxSuccess"
grails.plugins.springsecurity.auth.loginFormUrl = "/$lang/login/auth"
grails.plugins.springsecurity.auth.ajaxLoginFormUrl = "/$lang/login/authAjax"
grails.plugins.springsecurity.logout.afterLogoutUrl = "/$lang"
grails.plugins.springsecurity.adh.errorPage = "/$lang/login/denied"
grails.plugins.springsecurity.adh.ajaxErrorPage = "/$lang/login/ajaxDenied"

СОбственно, вопрос. Без спринга все работает как надо, но URI's
типа /login/denied, /login/authfail и пр,
вылетают из общей схемы и не работают.
Может быть и не правильно, но решил добавить в конфиге (вверху) доп
параметр языка $lang, при этом урлы оживились, но фильтром язык не
заполняется. Ошибка:

Error 2011-11-10 08:34:17,257 ["http-bio-8080"-exec-9] ERROR i18n.ParamsAwareLocaleChangeInterceptor  - Error intercepting locale change: Locale value "[:]" contains invalid characters
Message: Locale value "[:]" contains invalid characters

В общем, танцы с бубнами не увенчались - решил обратиться к сообществу.
Как ПРАВИЛЬНО интегрировать спринг в подобного рода приложение ?
Есть у кого-либо опыт в подобных проектах ?
Заранее спасибо !

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

  • 19 comments