Open huangkai521 opened 7 years ago
@POST @Path("register") @Consumes({MediaType.APPLICATION_JSON}) @Produces({ContentType.APPLICATION_JSON_UTF_8}) public Result registerUser(User user) { }
@huangkai521 @Consumes({MediaType.APPLICATION_JSON}) 用User对象应该没办法自动转,User没办法直接接收json吧,感觉不像跨域的问题
@Consumes({MediaType.APPLICATION_JSON}):指定registerUser()接收JSON格式的数据。REST框架会自动将JSON数据反序列化为User对象
哦,那你在dubbo的服务提供者http协议header头中就需要手动加跨域标识了: 类似: addHeader(Access-Control-Allow-Origin,*)
在响应头里面加了,可是请求压根过不去
那你最好抓包看一下,请求发出去服务器的响应是什么; 跨域请求的话会在真实请求前会发一个OPTIONS安全请求,看看OPTIONS是否发到服务器了,服务器的跨域检查是否通过了。
我用火狐的Firefox看的,会有一个post请求和options请求,但是post请求在前面
说点安全上的建议。严格来说,rpc的服务是不能通过浏览器,或者什么客户端直接调用的,基于“一切来自客户端的数据都是可疑的” 原则,这样做有很大的安全风险。 正确的做法是,ajax请求调用源站的服务接口,源站后台经过鉴权后再去调用dubbo的服务。 也就不存在跨域的问题了
建议: 1、rpc提供的是直接的业务服务,如果需要直接到client端,至少加一个nginx转发(当然也可以是一个web系统),这样可以在nginx上做add header之类的处理。甚至同源的转发处理。 2、dubbo支持的这种分布式服务,一直以来其实都是定位于两个应用间的服务管理,而不是直接面向最终用户的,即服务的消费者还是一个偏后台的应用系统。
使用dubbox开发的rest接口,使用ajax跨域调用rest接口,如果使用String类型的参数接受ajax提交的data是没问题的,如果使用实体类接受就会报"CORS 头缺少 'Access-Control-Allow-Origin'"错误,求解