小编Yur*_*kov的帖子

从FileChannel读取所有行到字符串流

对于我的具体任务,我需要将数据读取FileChannelStream(或Collection)String的.

在常规NIOPath我们可以使用方便的方法Files.lines(...)返回一个Stream<String>.我需要得到相同的结果,但是从而FileChannel不是Path:

public static Stream<String> lines(final FileChannel channel) {
//...
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点?

java nio java-8 java-stream

9
推荐指数
1
解决办法
672
查看次数

Gradle:如何从JScience jar依赖项中排除javax.realtime包(多个dex定义)

我在我的Android应用程序中使用Gradle,我想使用JScience库依赖项.我这样添加了库:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')

    compile 'org.jscience:jscience:4.3.1'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时我收到错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Ljavax/realtime/MemoryArea;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)
Run Code Online (Sandbox Code Playgroud)

这是因为javax.realtime项目中的包重复,一个是JDK的一部分,第二个是在Jscience库中.我试图在Gradle中以这种方式从Jscience库中删除此包:

sourceSets {
    main {
        java {
            exclude 'javax/realtime/**'
        }
    }
}

configurations {
    all*.exclude group: 'javax.realtime'
}
Run Code Online (Sandbox Code Playgroud)

但这没有帮助.因此,该包仍然存在于依赖项中. 在此输入图像描述

有没有什么办法可以在编译时从jar中排除一个包?

java dependencies android jscience gradle

8
推荐指数
1
解决办法
4839
查看次数

使用外部 IDP 代理通过 KeyCloak 编程用户名/密码访问

我正在使用身份代理功能和外部 IDP。因此,用户登录到外部 IDP UI,然后 KeyCloak 代理客户端从外部 IDP 接收 JWT 令牌,KeyCloak 提供 JWT,我们可以使用它来访问资源。我已经设置了Default Identitiy Provider功能,因此外部 IDP 登录屏幕会在用户登录时显示给用户。这意味着用户及其密码存储在外部 IDP 上。

当我需要在测试中以编程方式使用“直接访问授权”(资源所有者密码授权)登录时,就会出现问题。由于密码未存储在 KeyCloak 上,我总是在登录时从 KeyCloak 收到 401 Unauthorized 错误。当我尝试更改用户密码时,它开始工作,所以问题是 KeyCloak 上没有提供用户密码,并且使用“直接访问授权”KeyCloak 不会在程序登录时调用外部 IDP。

我使用以下代码获取访问令牌,但每次传递有效的用户名/密码时都会出现 401 错误。

org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 401 / Unauthorized
Run Code Online (Sandbox Code Playgroud)

为该客户端启用了直接访问授权。

public static String login(final Configuration configuration) {
    final AuthzClient authzClient = AuthzClient.create(configuration);
    final AccessTokenResponse accessTokenResponse = authzClient.obtainAccessToken(USERNAME, PASSWORD);
    return accessTokenResponse.getToken();
  }
Run Code Online (Sandbox Code Playgroud)

有什么办法可以修复吗?例如,在“直接访问授权”上调用身份代理,以便 KeyCloak 向我们提供它的有效令牌?

java oauth-2.0 openid-connect keycloak idp

8
推荐指数
1
解决办法
4952
查看次数

使用Java 8模块Gradle Android Project

正如我在这篇文章中看到的那样,Java 8现在还没有正式支持Android.所以我很感兴趣是否可以Android使用Java 7Java模块(作为依赖项)构建模块Java 8.

作为一个例子,我正在尝试创建一个Gradle包含一个Android模块和一个Java模块作为依赖项的项目.通过以下compileOptions两个模块的设置,一切正常.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将模块更改compileOptionsJava

compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error:Execution failed for task ':fc-android:preDexFreeDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

那么问题是,实际上可以用Android编译的1.7版本和依赖Java模块编译模块1.8吗?如果没有,为什么呢?

更新:

RetrolambaGradle(由@Saeed提到)是很好的,但是他们有lambda表达式的唯一支持,所以不能访问 …

java android gradle java-8 android-gradle-plugin

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

Spring Boot 2.0 Actuator git属性未添加到/ info

我使用GradleSpring Boot 2.0.0.M7和应用了以下插件:

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M7"
    }
}

plugins {
    id "com.gorylenko.gradle-git-properties" version "1.4.17"
}
Run Code Online (Sandbox Code Playgroud)

spring-boot-starter-actuator依赖也在那里.git.properties文件正确生成到build/main/resoures目录.我也增加了财产management.info.git.mode=full.由于官方文档,git信息应该/info使用GitInfoContributor自动添加到端点.但是,上述帮助和/info端点都没有返回空JSON - {}.关于如何解决这个问题的任何想法?

更新1:到目前为止我发现的是,如果我手动复制git.propertiesout/resources这种方式它会起作用,但它们不会因某种原因放在那里.

更新2:当我运行gradle bootRun它时,它工作,但是当我从Intellij IDEA启动它时gradle clean build,运行测试的运行检查这些属性是否显示在/info端点上 - 它不起作用.

spring gradle spring-boot spring-boot-actuator spring-boot-gradle-plugin

7
推荐指数
2
解决办法
3919
查看次数

用于多租户身份验证解决方案的可扩展架构

我们正在评估用于设置KeyCloak 的两种不同架构,以允许用户向我们系统内的其他用户和第三方授予对租户的访问权限。

我正在寻找有关这些的有经验的反馈,以尝试节省一些实验时间。

第一种方法动态客户端注册

在这种方法中,我们将有几个静态服务(资源服务器)来协调访问,然后每个租户通过动态注册的客户端表示。

然后,我们将拥有一组静态角色(权限),当用户和客户端被授予访问权限时,它们会在用户和客户端之间分配。

然后固定角色的总范围。这里的扩散是在用户和客户端或资源服务器和客户端之间。

第二种方法动态角色生成

在这种方法中,我们正在考虑为系统中的每个租户动态生成角色(权限)。我们正在考虑镜像 AWS 的 URN 样式,以便权限看起来像 ssl_certificate_key

它们遵循一般结构 urn:service:tenant:permission

例如

  • urn:service-1:tenant-id-1:read
  • urn:service-1:tenant-id-2:read
  • urn:service-1:tenant-id-1:write
  • urn:service-1:tenant-id-1:admin
  • urn:service-2:tenant-id-1:read

这非常简单和强大,但随着我们将用户或服务连接到越来越多的租户,我们有可能使 JWT 的规模激增。

我觉得第一种方法更标准,但需要我们向系统添加更多的复杂性,因为我们必须处理注册客户端并引导用户完成身份验证委托流程,每次他们想要授予对客户端的服务器访问权限时自己的。第二种方法在技术上非常简单,但不太符合标准。

我们一直在为此评估授权 API(基于UMA),但目前不适合,因为 KeyCloak 上有许多未解决的问题需要解决。

人们在现实世界中倾向于做什么来解决这个问题?我们的系统拥有无限数量的租户,但实际上每个用户最多只能与几十个相关联。第三方应用程序(都是动态客户端)可能会与成百上千的其他客户端相关联。

permissions authorization oauth-2.0 jwt keycloak

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

Intellij IDEA调试器无法处理Gradle Vert.X项目

我正在Vert.X使用Gradle构建工具使用框架开发项目.IntelliJ我遇到的问题是断点在我尝试的任何方式都不起作用.

这是Vert.X我在Gradle中使用的运行配置:

run {
    args = [
            'run', mainVerticleName,
            "-conf", confPath,
            "--redeploy=$project.ext.watchForChange",
            "--launcher-class=$mainClassName",
            "--on-redeploy=$project.ext.doOnChange"
    ]
}
Run Code Online (Sandbox Code Playgroud)

因此,部署完成后使用Gradle,运行没有任何问题,IntelliJ调试器已连接,但断点不起作用.

我试图让它运作的方式:

1)Gradle运行配置.这是一个运行配置Intellij IDEA: Intellij使用Gradle运行配置

尝试使用远程调试工具,使用以下VM选项启动应用程序:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

但这没效果.

2)应用程序配置: IntelliJ使用Application运行配置

在这种情况下,我无法启动项目,因为我在启动时收到以下消息:

Error: Could not find or load main class io.vertx.core.Launcher

Vert.X Core 库是在类路径和配置似乎是正确的,所以不能得到的是问题.

项目的源代码是公开的,可以在以下位置找到GitHub:

vertx-gradle这个架构起动

Vert.X版本 - 3.4.0.Gradle版本 - 3.4.1.IntelliJ IDEA版本 - 2016.3.5.操作系统 - MacOS Sierra 10.12.3.

有趣的是,当我Vert.X从测试部署时- 断点起作用.在我上面描述的情况下,为什么断点不起作用的任何想法?

java debugging intellij-idea gradle vert.x

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

AWS SAM本地与本地堆栈

我已经看到AWS最近为无服务器应用程序发布了AWS SAM Local。我发现LocalStack非常相似,我现在使用它来运行测试,并且看不到很多差异,因为它们都支持几乎相同的服务。两者之间有什么主要区别吗?

amazon-web-services atlassian-localstack

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

Android L:快速滚动RecyclerView

我正在尝试RecyclerView在我的应用程序中使用其中包含大量数据,并希望快速滚动它,就像它一样ListView.从这个答案的方法为我ListView工作,但不适用于RecyclerView.即使我trueRecyclerView布局中设置快速滚动,它仍然不起作用:

    <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fastScrollEnabled="true"
            android:fastScrollAlwaysVisible="true" />
Run Code Online (Sandbox Code Playgroud)

是否RecyclerView支持Android L移动的快速滚动?在文档中找不到任何相关内容.

android android-listview fastscroll android-5.0-lollipop android-recyclerview

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

MongoDB Atlas:不允许用户对 system.indexes 进行操作查找

我正在使用 MongoDB Atlas,最近我开始在我的 MongoDB 副本上收到此错误:

不允许用户对 [mydb.system.indexes] 执行操作 [find]

什么都没有真正改变,所以我想知道可能是什么问题。用户在文档中拥有readWrite角色,看起来它应该有权这样做。另外,我尝试将用户更改为具有任何权限的管理员用户,但仍然出现此错误。有趣的是,集合不存在于但 Spring Data 尝试查询它并收到此错误。mydbsystemmydb

这是来自 mongo 的完整日志:

Error: error: {
    "ok" : 0,
    "errmsg" : "user is not allowed to do action [find] on [mydb.system.indexes]",
    "code" : 8000,
    "codeName" : "AtlasError"
}
Run Code Online (Sandbox Code Playgroud)

MongoDB 连接 URI 如下所示:

spring.data.mongodb.uri=mongodb+srv://[USER]:[PASSWORD]@[MONGO_URL].mongodb.net/mydb
Run Code Online (Sandbox Code Playgroud)

我正在将 Spring Boot2.0.1.RELEASE与版本的 mongo java 驱动程序一起使用3.6.3。Mongo 副本的版本是3.4.14. 知道发生了什么以及如何解决这个问题吗?升级用户角色在这里没有帮助。

mongodb mongo-java spring-data-mongodb mongo-java-driver mongodb-atlas

4
推荐指数
1
解决办法
5774
查看次数