小编Qua*_*ing的帖子

Spring启动响应压缩无法正常工作

我有一些相当大的javascript捆绑文件,大约1MB.我正在尝试使用yml文件中的以下应用程序属性启用响应压缩:

server.compression.enabled: true
server.compression.mime-types: application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css
Run Code Online (Sandbox Code Playgroud)

但它不起作用.没有压缩发生.

请求标头:

Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, sdch, br
Run Code Online (Sandbox Code Playgroud)

响应标头

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Length:842821
Content-Type:application/javascript;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

响应中没有内容编码标头.

我正在使用spring boot version 1.3.5.RELEASE

我错过了什么?

===编辑4 ===我计划创建一个独立的应用程序,以进一步调查内容压缩属性无法正常工作的原因.但突然之间它开始工作了,我没有改变配置方面的任何事情,不是POM文件更改,而不是application.yml文件更改.所以我不知道发生了什么变化让它发挥作用......

===编辑3 === 进一步关注@ chimmi的建议.我在建议的地方放了断点.看起来对静态资源(js文件)的请求从未在这些断点处停止.只有休息API请求才能执行.并且对于那些请求,由于某种原因,内容长度为零,这导致跳过内容压缩.

在此输入图像描述

===编辑2 === 我在osbawServerProperties第180行设置了一个断点,感谢@ chimmi的建议,它显示所有属性都设置但不知何故服务器不尊重设置...... :(

在osbawServerProperties第180行打印压缩对象

===编辑1 ===

不确定是否重要,但我在这里粘贴我的应用程序主要和配置代码:

Application.java:

@SpringBootApplication
public class TuangouApplication extends SpringBootServletInitializer {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(TuangouApplication.class, args); …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-boot

23
推荐指数
3
解决办法
1万
查看次数

如何在Swift项目中使用iOS SDK插入firebase服务器时间戳

iOS指南"脱机功能"部分中,它提到了kFirebaseServerValueTimestamp,这似乎不适用于Swift项目(自动完成不会提示它).

我尝试[".sv": "timestamp"]过Swift示例.但它抱怨说这不能用其他值设置,并且必须是给定路径的唯一值.

我试过了:

ref.childByAutoId().setValue(["text": "foobar", ".sv": "timestamp"], withCompletionBlock: {...} 
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,".sv"无法与其他值一起保存.

我想要做的是保存createdAt时间戳以及对象的其他值.而且我更喜欢使用服务器时间来避免客户端时钟偏差.

我怎样才能做到这一点?

ios firebase swift firebase-realtime-database

5
推荐指数
2
解决办法
6111
查看次数

如何将常规用户名/密码登录与第三方社交登录集成为Spring Boot + Angular单页Web应用程序?

我有一个Angular + Spring启动单页Web应用程序.该服务器还充当Auth服务器,它为角应用程序发出令牌以用于进行Restful API调用.

我的旧登录流使用grant_type = password POST调用/ oauth/token端点来获取Bearer令牌.代表用户的所有进一步API调用将包括Bearer令牌作为"授权"http头.

现在我需要整合社交登录(脸书,推特等),这意味着我没有用户名/密码来生成令牌,所以我不知道如何让它工作.

我一直在使用以下两个教程作为我的模板:

Spring Security和Angular JS

Spring Boot和OAuth

在第一个教程的oauth-vanilla示例中,用户名passwork登录流程会显示授权页面.但我想拥有传统的用户名/密码表单登录体验(直接登录用户而不是显示授权页面).

在第二个教程中,在登录facebook之后,我想使用facebook id查找我的内部用户数据库并创建一个新用户(如果不存在)并以用户身份登录.并使用内部db用户的身份和权限来授权将来对我的API服务器的API调用.

我在https://github.com/dingquan/spring-angular-oauth上有一个简化的样本

我可以对/ oauth/token端点进行POST调用,并使用返回的令牌对我的protected/api/blogs端点进行进一步的api调用.但我还没弄明白如何使以下事情奏效:

  1. 用户名/密码登录将创建会话cookie,因此我不需要发送授权承载令牌以用于将来对资源端点的API调用

  2. 在facebook登录后(facebook登录链接在用户名/密码登录表单下),对我的端点的调用仍然失败,出现401错误(我有一个"测试"按钮,可以调用/ api/blogs,你可以点击它看到的行为).那么我错过了什么让API调用成功?

===更新===

只是为了澄清.以下是我要实现的目标:

  1. 多种身份验证方式(传统用户名/密码,第三方oauth登录如facebook,未来可能是手机号码+短信代码)
  2. 我们确实需要我们自己的DB支持的用户模型来存储其他用户属性,纯社交登录是不够的
  3. 社交登录需要隐含.意味着用户在通过第三方(Facebook等)登录后,不需要手动在我们的系统中创建用户帐户.我们不只是抓住用户的社交个人资料数据来预先填写注册表单.如果没有现有的db用户与给定的外部社交帐户关联,我们希望在场景后自动创建新的DB用户.即如果用户通过Facebook登录,则无需输入用户名/密码.通过Facebook验证将自动将用户登录到我们的系统中,用户应该能够在登录Facebook后访问受限资源.

有一些混乱,我可能会要求人们将他们的Facebook用户名/密码放在我的应用程序托管的登录表单中,我将代表用户登录facebook.这不是我要求的.

spring-security angularjs spring-boot spring-oauth2

5
推荐指数
1
解决办法
1175
查看次数

使用哪种 Spring 事务隔离级别来维护已售产品的计数器?

我有一个用 Spring Boot + Angular 编写的电子商务网站。我需要在我的产品表中维护一个计数器来跟踪已售出的数量。但是,当许多用户同时订购同一商品时,计数器有时会变得不准确。

在我的服务代码中,我有以下事务声明:

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)

其中,在保留订单(使用CrudRepository.save())后,我执行一个选择查询来汇总迄今为止订购的数量,希望选择查询能够计算所有已提交的订单。但事实似乎并非如此,计数器有时会小于实际数字。

我的其他用例也出现同样的问题:产品数量限制。我使用相同的事务隔离设置。在代码中,我将执行一个选择查询来查看已售出多少数量,如果我们无法履行订单,则会抛出缺货错误。但对于热门商品,我们有时会超卖该商品,因为每个线程看不到刚刚在其他线程中提交的订单。

那么READ_COMMITTED隔离级别适合我的用例吗?或者我应该对此用例进行悲观锁定?

更新 2017 年 5 月 13 日

我选择了 Ruben 的方法,因为我对 java 的了解比对数据库的了解更多,所以我选择了更简单的方法。这就是我所做的。

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE)
public void updateOrderCounters(Purchase purchase, ACTION action)
Run Code Online (Sandbox Code Playgroud)

我使用JpaRepository,所以我不直接玩entityManager。相反,我只是将更新计数器的代码放在一个单独的方法中,并如上注释。到目前为止似乎运作良好。我见过超过 60 个并发连接下订单,没有超卖,响应时间似乎也不错。

spring hibernate transactions spring-data spring-boot

5
推荐指数
1
解决办法
2293
查看次数

Cassandra java驱动设置全局一致性级别

所以在datastax doc 中,它指出 ConsistencyLevel 可以通过 QueryOptions 全局设置:

QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);
Run Code Online (Sandbox Code Playgroud)

我注意到这不是一个静态方法并返回一个 QueryOptions 实例。这是否意味着简单地调用此方法不会全局设置默认一致性级别,并且在连接到 Cassandra 集群时我需要使用 QueryOptions?我的意思是,是否需要以下代码(QueryOption在构建Cluster对象时设置)

cluster = Cluster.builder().addContactPoint("192.168.0.30")
.withQueryOptions(new QueryOptions()
.setConsistencyLevel(ConsistencyLevel.ONE)
.withRetryPolicy(DefaultRetryPolicy.INSTANCE)
.withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy()))
.build();
session = cluster.connect("demo");
Run Code Online (Sandbox Code Playgroud)

我的问题是我无权访问构建 Cluster 实例的代码。这是否意味着我无法设置全局一致性级别而必须依赖于设置 per Statement

java cassandra datastax-java-driver datastax cassandra-2.0

5
推荐指数
1
解决办法
3742
查看次数