に基づく多言語ログインページ:スプリングセキュリティ。私は私の春のブートアプリケーションでのURLの一部としてロケールを持っているURL
/サイト - デフォルトロケール
/EN /サイト - 英語ロケール
私はカスタムインターセプタを使用しますこのために:
import org.springframework.beans.propertyeditors.LocaleEditor
import org.springframework.util.Assert
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter
import org.springframework.web.servlet.support.RequestContextUtils
import javax.servlet.ServletException
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import java.util.Locale
import java.util.regex.Pattern
class CustomLocaleChangeInterceptor : HandlerInterceptorAdapter() {
private var localePattern: Pattern? = null
private fun setLocalePattern(localePattern: String) {
Assert.isTrue(localePattern.matches(".*\\(.*\\).*".toRegex()), "Your pattern needs to define a match group")
this.localePattern = Pattern.compile(localePattern)
}
@Throws(ServletException::class)
override fun preHandle(request: HttpServletRequest?, response: HttpServletResponse?, handler: Any?): Boolean {
this.setLocalePattern("(en)")
val pathTranslated = request!!.requestURI.substring(request.contextPath.length)
if (pathTranslated.isNotEmpty()) {
val matcher = localePattern!!.matcher(pathTranslated)
if (matcher.find()) {
resolver(request, response, matcher.group(1))
} else {
resolver(request, response, "th")
}
}
// Proceed in any case.
return true
}
private fun resolver(request: HttpServletRequest, response: HttpServletResponse?, locale: String) {
val localeResolver = RequestContextUtils.getLocaleResolver(request) ?: throw IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?")
val localeEditor = LocaleEditor()
localeEditor.asText = locale
localeResolver.setLocale(request, response, localeEditor.value as Locale)
}
}
質問は2つのクストを処理するための最良の方法は何であるかでありますm春のログインページ?制限されたURLに/ enが含まれている場合、ユーザーは/ en/loginページ(英語)にリダイレクトする必要があります。そうでない場合はページにデフォルトのロケールがある場合は/ login url(デフォルト言語)にリダイレクトする必要があります
ありがとうございますが、わかりましたが、あなたの答えは、認証が成功した後にユーザーをリダイレクトする場所に関連しています。私は逆の方法でそれを行う必要があります:どのログインページにユーザーに認証を送信するか。 – pszkv