我的語言環境網址在我的春天啓動應用程序的一部分多語言登錄頁面:Spring Security。基於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)
}
}
的問題是什麼是處理兩個丘斯托的最佳方式Spring中的m個登錄頁面?當受限制的url包含/ en用戶應該被重定向到/ en /登錄頁面(使用英語),否則如果頁面具有默認語言環境,則應該重定向到/ login url(使用默認語言)
謝謝Hicham,但據我所知,您的答案涉及成功驗證後將用戶重定向到何處。我需要以相反的方式做到這一點:到什麼登錄頁面發送用戶進行身份驗證。 – pszkv