2

ログイン時にアプリケーション言語を選択できるようにしたい。しかし、スプリングセキュリティを使用しているので、リクエストパラメータから選択した言語パラメータを取得する方法が本当にわかりませんか?

プロセス自体を変更せずにSpringセキュリティ認証プロセスをインターセプトする方法はありますか(カスタム認証の例をいくつか見つけましたが、現時点では必要ありません)?

または、さらにリダイレクトされる前にリクエストパラメータを取得するためのベストプラクティスは何でしょうか?ありがとう。

4

2 に答える 2

1

次の場所で、(デフォルトではなく)独自の認証成功ハンドラーを設定できますresources.groovy

authenticationSuccessHandler(MyAuthenticationSuccessHandler) {
}

ここでMyAuthenticationSuccessHandler、を実装するクラス、またはデフォルトで使用されるAuthenticationSuccessHandler拡張するクラスは次のようになります。AjaxAwareAuthenticationSuccessHandler

authenticationSuccessHandler(AjaxAwareAuthenticationSuccessHandler) {
    requestCache = ref('requestCache')
    defaultTargetUrl = conf.successHandler.defaultTargetUrl // '/'
    alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault // false
    targetUrlParameter = conf.successHandler.targetUrlParameter // 'spring-security-redirect'
    ajaxSuccessUrl = conf.successHandler.ajaxSuccessUrl // '/login/ajaxSuccess'
    useReferer = conf.successHandler.useReferer // false
    redirectStrategy = ref('redirectStrategy')
}

このクラスは、次の場所で実際のリクエストにアクセスできます。

void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException;
于 2012-06-11T15:52:24.273 に答える
0

Grailsには、Spring-Securityとは関係なく、すべてのリクエストでユーザーの言語を変更するためのサポートがすでに組み込まれています。リクエストで呼び出されたパラメータを設定すると、そのパラメータlangがインターセプトされ、ユーザーのロケールを設定するために使用されます。

たとえば、lang=XXXXが2文字の言語コードまたはのような言語/国の組み合わせである場合に送信する入力要素をログインフォームに配置できますen_GB。Grailsは、そのセッションに関連付けられているロケールを自動的に更新します。Accept-Languageこれにより、ユーザーのブラウザがおそらくすでに送信しているヘッダーが上書きされることに注意してください。

ロケールを手動で更新するには、次のようにします。

import org.springframework.web.servlet.support.RequestContextUtils
import org.springframework.beans.propertyeditors.LocaleEditor

def localeResolver = RequestContextUtils.getLocaleResolver(request)
def localeEditor = new LocaleEditor()
localeEditor.setAsText(params.lang)
localeResolver?.setLocale(request, response, localeEditor.value)
于 2012-06-11T15:42:48.940 に答える