Je locales comme une partie de l'URL dans mon application Boot Spring:Sécurité de printemps. page de connexion multilangue basé sur url
/site - locale par défaut
/fr/site - paramètres régionaux anglais
J'utilise intercepteur personnalisé pour cela:
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)
}
}
la question est quelle est la meilleure façon de gérer deux custo m pages de connexion au printemps? Lorsque l'URL restreinte contient/fr utilisateur doit être redirigé vers/fr/page de connexion (en anglais) sinon si la page a les paramètres régionaux par défaut, rediriger vers/login url (avec la langue par défaut)
Merci Hicham mais si je comprends bien, votre réponse se rapporte à l'endroit où rediriger l'utilisateur après une authentification réussie. Je dois le faire de manière opposée: à quelle page de connexion envoyer l'utilisateur pour faire leur authentification. – pszkv