配置Spring数据REST以允许跨源请求
我在Kotlin中建立了一个简单的Spring数据REST项目,其中包含两个@RepositoryRestResource注释存储库。我通过在Postman和浏览器中调用端点来验证它们是否工作正常。 现在,我正在将它连接到Vue前端,我正在使用CORS安全措施,而我似乎找不到允许使用正确来源的方法 我已经在Spring的Github和博客上尝试了这里提到的所有修复,但我似乎做错了什么。我的代码如下所示: 应用程序:配置Spring数据REST以允许跨源请求,spring,kotlin,cors,spring-data-rest,Spring,Kotlin,Cors,Spring Data Rest,我在Kotlin中建立了一个简单的Spring数据REST项目,其中包含两个@RepositoryRestResource注释存储库。我通过在Postman和浏览器中调用端点来验证它们是否工作正常。 现在,我正在将它连接到Vue前端,我正在使用CORS安全措施,而我似乎找不到允许使用正确来源的方法 我已经在Spring的Github和博客上尝试了这里提到的所有修复,但我似乎做错了什么。我的代码如下所示: 应用程序: @SpringBootApplication @EnableConfigurat
@SpringBootApplication
@EnableConfigurationProperties(MyProperties::class)
class MyApplication
fun main(args: Array<String>) {
SpringApplication.run(MyApplication::class.java, *args)
}
@springboot应用程序
@EnableConfigurationProperties(MyProperties::class)
类MyApplication
趣味主线(args:Array){
run(MyApplication::class.java,*args)
}
存储库:
@CrossOrigin("http://localhost:8081", maxAge = 3600)
@RepositoryRestResource
interface SongRepository : CrudRepository<Song, Long> {
fun findByTitle(title: String): Song?
fun findBySlug(slug: String): Song?
fun findAllByOrderByAddedAtDesc(): Iterable<Song>
}
@CrossOrigin("http://localhost:8081", maxAge = 3600)
@RepositoryRestResource
interface UserRepository : CrudRepository<User, Long> {
fun findByEmail(login: String): User?
}
@CrossOrigin(“http://localhost:8081,maxAge=3600)
@存储资源
接口存储库:crudepository{
有趣的FindBytle(标题:字符串):歌曲?
有趣的findBySlug(slug:String):歌曲?
fun findAllByOrderByAddedAtDesc():Iterable
}
@交叉原点(“http://localhost:8081,maxAge=3600)
@存储资源
接口用户存储库:CrudRepository{
fun findByEmail(登录名:String):用户?
}
配置:
@Configuration
class WebConfiguration {
@Bean
fun corsConfigurer(): WebMvcConfigurer? {
return object : WebMvcConfigurer {
override fun addCorsMappings(registry: CorsRegistry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8081/")
}
}
}
@Bean
fun repositoryRestConfigurer(): RepositoryRestConfigurer? {
return object : RepositoryRestConfigurer {
override fun configureRepositoryRestConfiguration(
configuration: RepositoryRestConfiguration,
corsRegistry: CorsRegistry
) {
corsRegistry.addMapping("/api/**")
.allowedMethods("*")
.allowedOrigins("http://localhost:8081/")
}
}
}
@Bean
fun corsFilter(): FilterRegistrationBean<*> {
val source = UrlBasedCorsConfigurationSource()
val config = CorsConfiguration()
config.allowCredentials = true
config.addAllowedOrigin("http://localhost:8081/")
config.addAllowedHeader("*")
config.addAllowedMethod("*")
source.registerCorsConfiguration("/**", config)
val bean: FilterRegistrationBean<*> = FilterRegistrationBean(CorsFilter(source))
bean.order = Ordered.HIGHEST_PRECEDENCE
return bean
}
}
@配置
类网络配置{
@豆子
fun corsConfigurer():WebMVCConfiguer{
返回对象:WebMVCConfiguer{
覆盖公司名称(注册号:CorsRegistry){
registry.addMapping(“/api/**”)
.允许的来源(”http://localhost:8081/")
}
}
}
@豆子
有趣的repositoryRestConfigurer():repositoryRestConfigurer{
返回对象:RepositoryRestConfigurer{
覆盖fun配置RepositoryRestConfiguration(
配置:RepositoryRestConfiguration,
公司注册:公司注册
) {
corsRegistry.addMapping(“/api/**”)
.允许的方法(“*”)
.允许的来源(”http://localhost:8081/")
}
}
}
@豆子
fun corsFilter():FilterRegistrationBean{
val source=UrlBasedCorsConfigurationSource()
val config=corscoConfiguration()
config.allowCredentials=true
config.addAllowedOrigin(“http://localhost:8081/")
config.addAllowedHeader(“*”)
config.addAllowedMethod(“*”)
source.registerCorsConfiguration(“/**”,配置)
Valbean:FilterRegistrationBean=FilterRegistrationBean(CorsFilter(源))
bean.order=Ordered.HIGHEST\u优先级
返回豆
}
}
在最后一节课中,我添加了所有的解决方案,并向存储库中添加了@CrossOrigin注释,但到目前为止运气不佳。你知道我做错了什么吗