Seguridad de spring. Página de inicio de session multilenguaje basada en url

Tengo configuraciones regionales como parte de la URL en mi aplicación Spring Boot:

/ sitio – configuration regional pnetworkingeterminada

/ en / site – Configuración regional en inglés

Yo uso un interceptor personalizado para esto:

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 pregunta es: ¿cuál es la mejor manera de manejar dos páginas de inicio de session personalizadas en Spring? Cuando la URL restringida contiene / en usuario debe ser networkingireccionada a / en / página de inicio de session (con idioma inglés); de lo contrario, si la página tiene la configuration regional pnetworkingeterminada, debe networkingirigirse a / iniciar session en la url (con el idioma pnetworkingeterminado)

en security de spiring puedes usar esto

 import java.io.IOException; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.stereotype.Component; @Component public class Securityhandler implements AuthenticationSuccessHandler { public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { Local local= LocaleContextHolder.getLocale(); if(local.equals("yourcodeLang"){ response.sendRedirect("/yourUrl"); } else // your logic } } 

y actualiza tu configuration de esta manera:

  @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .... .successHandler(yourSuccessHandlerBean) // autowinetworking or defined ... } 

Mientras tanto encontré esta solución. Tal vez no es perfecto, pero funciona.

 @EnableWebSecurity @Order(1) class SecurityConfigTH : WebSecurityConfigurerAdapter() { private val localePattern: Pattern = Pattern.compile("^/en(\$|/)") @Throws(Exception::class) override fun configure(http: HttpSecurity) { http .authorizeRequests() .anyRequest().authenticated() .and() .requestMatcher { !localePattern.matcher(it.requestURI.toString()).find() } .formLogin() .loginPage("/login") .permitAll() } } @EnableWebSecurity @Order(2) class SecurityConfigEN : WebSecurityConfigurerAdapter() { private val localePattern: Pattern = Pattern.compile("^/en(\$|/)") @Throws(Exception::class) override fun configure(http: HttpSecurity) { http .authorizeRequests() .anyRequest().authenticated() .and() .requestMatcher { localePattern.matcher(it.requestURI.toString()).find() } .formLogin() .loginPage("/en/login") .permitAll() } }