Java 在安全筛选器之前设置会话区域设置

Java 在安全筛选器之前设置会话区域设置,java,spring-boot,spring-security,Java,Spring Boot,Spring Security,在Spring启动应用程序中,我试图在任何Spring安全过滤器之前设置当前请求的区域设置。我使用spring security进行OAuth2&OIDC身份验证,用例是有一个自定义查询参数,Idp使用该参数在登录流期间更改语言 我所尝试的: 在我的网站安全配置适配器中: 公共类WebSecurity配置器扩展WebSecurity配置器适配器 @凌驾 受保护的无效配置(HttpSecurity http)引发异常{ http.addFilterBefore(new MyFilter(),OAu

在Spring启动应用程序中,我试图在任何Spring安全过滤器之前设置当前请求的区域设置。我使用spring security进行OAuth2&OIDC身份验证,用例是有一个自定义查询参数,Idp使用该参数在登录流期间更改语言

我所尝试的: 在我的
网站安全配置适配器中

公共类WebSecurity配置器扩展WebSecurity配置器适配器
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http.addFilterBefore(new MyFilter(),OAuth2LoginAuthenticationFilter.class)
.......
.oauth2Login(oauth->oauth.authorizationEndpoint().authorizationRequestResolver(解析器));
}
}
类MyFilter扩展了GenericFilterBean{
@凌驾
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException{
Locale=getLocale(请求);
RequestContextUtils.getLocaleResolver((HttpServletRequest)请求)
.setLocale((HttpServletRequest)请求,(HttpServletResponse)响应,区域设置);
//我们也尝试过LocaleContextHolder.setLocale(locale,true/false);但都是一样的
链式过滤器(请求、响应);
}
专用语言环境getLocale(ServletRequest请求){
String param=request.getParameter(“ui_locales”);
返回可选的.ofNullable(StringUtils.trimToNull(param)).map(Locale::forLanguageTag).orElse(Locale.US);
}
}
但问题是下面的
RequestContextUtils#getLocaleResolver
要么返回
null
要么返回
LocaleContextHolder.getLocale()
不返回预期的区域设置

如何使用:

公共类解析器实现OAuth2AuthorizationRequestResolver{
// ...... 
//覆盖和解决请求
// ...
专用OAuth2AuthorizationRequest customAuthorizationRequest(OAuth2AuthorizationRequest authorizationRequest,HttpServletRequest){
Map extraParams=getCustomParams(请求);
返回OAuth2AuthorizationRequest.from(authorizationRequest)
.附加参数(附加参数)
.build();
}
私有映射getCustomParams(HttpServletRequest请求){
Locale=LocaleContextHolder.getLocale();//TODO这不起作用!
返回入口地图(
.......
条目(“ui_locales”,locale.toLanguageTag())
);
}
}
我希望
http://blah.com?ui_locales=fr-FR
将正确传播到idp。你知道怎么做吗