每次 localhost:4200(通过 cors 过滤器)向 localhost:8080 发出 http 请求时,它会丢失保存身份验证的 sessionscope bean,这基本上使它无法通过 403 进行所有调用。不包括第一个 http 请求(不在后面)弹簧安全)
我有一个在 localhost:8080 中运行良好的 spring boot 应用程序。我们正在其中创建一个角度 iframe,它也运行良好(当部署在 localhost:8080 上时)
但是当我们在 localhost:4200 (ng serve) 上执行它时它不会工作
它开始抱怨 cors 所以我有以下配置,除了我添加的关于 cors 的所有内容。
@Configuration
@Profile({"dev"})
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class springDevConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http.headers().cacheControl().disable();
http.cors().configurationSource(corsConfigurationSource())
.and().authorizeRequests().anyRequest().permitAll();
}
@Bean
public CorsConfigurationSource corsConfigurationSource(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(
ImmutableList.of("http://localhost:4200"));
configuration.setAllowedMethods(Arrays.asList(
RequestMethod.GET.name(),
RequestMethod.POST.name(),
RequestMethod.OPTIONS.name(),
RequestMethod.DELETE.name(),
RequestMethod.PUT.name()));
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
我的会话 bean 相当简单
@Component
@SessionScope
public class UserSession {
//Holds the Authorities for the prePostEnabled
User user;
...
}
为了初始化用户,我向某个端点(未受保护的)发出请求并在代码中执行类似的操作
...
User user = new User(id, "", authorities);
Authentication auth = new UsernamePasswordAuthenticationToken(
user, null,authorities));
SecurityContextHolder.getContext().setAuthentication(auth);
Usersession.setUser(user);
...
当我在 localhost:8080 上发出 http 请求时,后续的 http 请求具有相同的会话。
但是当我尝试从 localhost:4200 向 localhost:8080 发出请求时,每个请求似乎都获取了不同的 UserSession / 也许打开了一个新会话?
(在所有受保护的端点上给我 403)
真正发生了什么,为什么在向 localhost:8080 发出请求时 localhost:4200 每次调用都会创建一个新会话?(应该更改哪些配置来解决此类问题?)
慕容708150
相关分类