我应该在 Spring 后端禁用 CORS 吗?未经授权的请求被阻止
Posted
技术标签:
【中文标题】我应该在 Spring 后端禁用 CORS 吗?未经授权的请求被阻止【英文标题】:Should I disable CORS in spring backend? Unathorized request is blocked 【发布时间】:2020-04-29 02:47:46 【问题描述】:我正在使用 Spring Boot 和 Vue 开发项目,我需要保护我的端点。用户将具有特定角色、管理员角色或典型用户角色。当我搜索如何配置 JWT 和 spring 安全性的教程时,我收到了 cors().disable()
only 的禁用 cors 的文章。这就是我的问题.. 如果 spring 后端中的 cors 被禁用,我可以通过 axios 从我的前端 Vue 应用程序发送请求吗?禁用它是正确的方法吗?我的很多来自 api 的请求都被 cors 阻止了,所以我启用了它,但我没有实现用户角色,这让我很困惑现在该怎么做,因为我必须这样做......另一个问题是当我实现 httpSecurity.csrf().disable().authorizeRequests().antMatchers("/authenticate", "/register","/login").permitAll().
并尝试从同一网络中的另一台设备调用 /authenticate 然后弹簧阻止它但它不应该被阻止.. 在控制器顶部我有 @CrossOrigin(origins="*", maxAge=3600)
和 @RestController
所以我不知道为什么我的请求被阻止.
如果你有一些想法,请帮助我。
最好的问候!
【问题讨论】:
配置:httpSecurity.csrf().disable() .authorizeRequests().antMatchers("/authenticate", "/register","/login").permitAll(). antMatchers(HttpMethod.OPTIONS, "/**").permitAll(). anyRequest().authenticated().and(). exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); httpSecurity.cors();
CORS 允许您的后端 api “交谈”以从不同的来源请求。如果您正在创建 api 服务,并且希望允许来自不同地方、Vue 应用程序、移动应用程序等的请求,您将需要 CORS。如果您禁用 CORS,您的 api 将只允许来自与您的主机相同的主机的请求api服务。
【参考方案1】:
将此设置在每个控制器的顶部
@CrossOrigin(origins = "*")
@RestController
并在 SecuriyConfig 中设置代码如下。它对我有用。
httpSecurity.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(jwtAuthenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.ttf",
"/**/*.woff",
"/**/*.woff2",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.jpeg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
.antMatchers("/authenticate", "/register","/login")
.permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**")
.permitAll()
.anyRequest()
.authenticated();
【讨论】:
以上是关于我应该在 Spring 后端禁用 CORS 吗?未经授权的请求被阻止的主要内容,如果未能解决你的问题,请参考以下文章