小编bit*_*ver的帖子

RxJava仅检查具有超时的第一个响应项

我看到ReactiveX(RxJava)有一个运算符timeout,它将应用于订阅流中的每个项目.但我只想检查超时的第一个响应,而不关心以下响应的超时.如何使用RxJava的运算符优雅地实现此要求?

java reactive-programming rx-java

9
推荐指数
2
解决办法
1513
查看次数

如何使用OAuth2实现第三方登录/注册?

这是我实现这种登录/注册逻辑的计划(授权代码流程).(第三方仅提供OAuth2 API)

首先,SPA前端将向第三方发送GET请求

GET https://www.example.com/oauth2
client_id=dummyclient
redirect_uri=https://mysite/callback
response_type=code
scope=openid
Run Code Online (Sandbox Code Playgroud)

然后,如果用户同意将他/她的openid提供给mysite,那么fronend将获得301 HTTP响应.

---> 301 https://mysite/callback?code=dummycode
Run Code Online (Sandbox Code Playgroud)

然后浏览器将页面重定向到mysite/callback它,它将重新加载SPA并在URL中公开可由SPA捕获的代码,然后它将代码发送到真正的后端回调.

GET https://mysite/api/real-callback?code=dummycode
Run Code Online (Sandbox Code Playgroud)

当后端获取代码时,它会将代码发送给第三方进行交换access_token.当后端获取时access_token,它将触发API请求以获取用户的openid,然后决定是让用户登录还是注册为新用户.最后它将回馈给我们的SPA前端HTTP响应它包含access_token的OAuth2系统或401未授权的响应.

所以我的问题是如何证明真正的回调是由自己的客户调用的(因为如果一些攻击者嵌入了我的前端,client_id那么他可以伪造OAuth2请求并对用户进行网络钓鱼同意.之后攻击者将获得一个有效的代码然后他将代码发送回我真正的回调.最后,他将access_token在我的系统中获得用户.)如何在没有最终用户提供密码等附加信息的情况下使用OAuth2进行身份验证.

oauth-2.0

7
推荐指数
1
解决办法
858
查看次数

Android gradle-experimental与数据绑定无法正常工作?

当我尝试使用最新的Android构建工具(gradle-experimental:0.6.0-alpha3)和数据绑定框架时,​​我遇到了一些麻烦.当我尝试刷新所有gradle项目时,它会导致错误.

第一:Error:Exception thrown while executing model rule: BaseComponentModelPlugin.Rules#createBinaryTasks > create(dataBindingExportBuildInfoAllDebug)

model {
    ...
    android.dataBinding {
        enabled = true
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

第二:Error:Cause: com.android.build.gradle.managed.AndroidConfig$Impl

model {
    android {
        ...
        dataBinding {
            enabled = true
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

data-binding android android-studio gradle-experimental

6
推荐指数
1
解决办法
625
查看次数

如何在同一个正则表达式中使用捕获的组

mFoo = foo;
mBar = bar;
// convert to
this.foo = foo;
this.bar = bar;
Run Code Online (Sandbox Code Playgroud)

如何使用正则表达式来处理这种替换?请帮忙.这是我在Android Studio中使用的方法(IntelliJ IDEA)Edit -> Find -> Replace in Path

Text to find: m([A-Z])([A-Za-z0-9]+) = L$1$2
Replace with: this\.L$1$2 = L$1$2
Run Code Online (Sandbox Code Playgroud)

更新

L上面是一个错字.应该\L根据JetBrains的文件

regex intellij-idea android-studio

6
推荐指数
1
解决办法
4173
查看次数

如何使用构造函数参数初始化WebSocket端点

我现在正在使用javax.websocket.*API,但我不知道如何Endpoint在Internet上搜索后使用一些构造函数参数初始化.

ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); //jetty
container.addEndpoint(MyWebSocketEndpoint.class);
Run Code Online (Sandbox Code Playgroud)

我想在初始化时传递一些参数MyWebSocketEndpoint然后我可以使用参数,比方说clientQueue,在我的onOpen方法中做类似的事情:

clientQueue.add(new Client(session));
Run Code Online (Sandbox Code Playgroud)

java java-websocket

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

在 Spock 中,如何从“then”块中消除重复的交互?

我正在使用 Spock 测试框架。我有很多测试的结构与此类似:

def "test"() {
    when:
    doSomething()
    then:
    1 * mock.method1(...)
    2 * mock.method2(...)
}
Run Code Online (Sandbox Code Playgroud)

我想将“then”块的代码移动到辅助方法中:

def assertMockMethodsInvocations() {
    1 * mock.method1(...)
    2 * mock.method2(...)
}
Run Code Online (Sandbox Code Playgroud)

然后调用这个辅助方法来消除我的规范中的代码重复,如下所示:

def "test"() {
    when:
    doSomething()
    then:
    assertMockMethodsInvocations()
}
Run Code Online (Sandbox Code Playgroud)

但是,在放入n * mock.method(...)辅助方法时,我无法匹配方法调用。以下示例演示:

// groovy code
class NoInvocationsDemo extends Specification {

    def DummyService service

    def "test"() {
        service = Mock()

        when:
        service.say("hello")
        service.say("world")

        then:
        assertService()
    }

    private assertService() {
        1 * service.say("hello")
        1 * service.say("world")
        true
    }

}

// java code
public …
Run Code Online (Sandbox Code Playgroud)

testing groovy spock

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

如何在spring-webflux WebFilter中正确使用slf4j MDC

我引用了博客文章Contextual Logging with Reactor Context和MDC,但我不知道如何在WebFilter中访问Reactor上下文

@Component
public class RequestIdFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        List<String> myHeader =  exchange.getRequest().getHeaders().get("X-My-Header");

        if (myHeader != null && !myHeader.isEmpty()) {
            MDC.put("myHeader", myHeader.get(0));
        }

        return chain.filter(exchange);
    }
}
Run Code Online (Sandbox Code Playgroud)

java project-reactor spring-webflux

5
推荐指数
4
解决办法
3111
查看次数

JVisualVM 线程调查器中的 Keep-Alive-Timer 是什么意思?

在此处输入图片说明

这些 Keep-Alive-Timer 线程在左侧有白色标签,下面没有描述白色标签的含义。我想知道这些 Keep-Alive-Timer 线程是如何创建的以及为什么。

在此处输入图片说明

实际上,我正在使用Timer在我的程序中检查心跳消息。每当心跳到来时,我都会安排一个新的TimerTask,延迟 6 秒。如果没有心跳,TimerTask则触发并发送警报。

java multithreading timer jvisualvm

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

LocalDateTime 未序列化为时间戳

jackson-datatype-jsr310用来支持 Java 8 时间数据类型。

我创建了一个这样的 ObjectMapper:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
objectMapper.registerModule(new JavaTimeModule());

Foo foo = new Foo();
LocalDateTime t = LocalDateTime.now();
foo.setT1(Date.from(t.toInstant(ZoneOffset.UTC)));
foo.setT2(Timestamp.valueOf(t));
foo.setT3(t);

System.out.println(objectMapper.writeValueAsString(foo));
Run Code Online (Sandbox Code Playgroud)

并解析了一个 LocalDateTime 然后我[2016,12,21,15,53,57,178]没有1482306837178

这是我的测试模型类 Foo

public class Foo {

    private Date t1;

    private Timestamp t2;

    private LocalDateTime t3;

    // Getters & Setters
}
Run Code Online (Sandbox Code Playgroud)

我看到问题Jackson Java 8 DateTime serialization和问题所有者得到一个序列化的字符串,如1421261297.356000000. 我不知道如何得到它。我正在使用 jackson 2.8.5 与datatype-jsr310.

java jackson

2
推荐指数
1
解决办法
2388
查看次数