我正在运行 KeyCloak 服务器来验证想要访问 Spring Boot/Spring Web REST API 的用户。但是,尝试进行身份验证时发生错误。
以下工作:
http://localhost:8080/path/to/restapi白标错误页面 此应用程序没有明确的 /error 映射,因此您将其视为后备。
这是打印到 Spring Boot 控制台的错误:
Caused by: java.lang.ClassNotFoundException: java.security.acl.Group
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
... 33 common frames omitted
Run Code Online (Sandbox Code Playgroud)
KeyCloak 服务器显示该会话对于该应用程序的用户来说是活动的。但是,由于上述缺少的类,认证过程永远不会完成。
在 docker 上启动 keycloak 服务器时,我收到此错误:“您需要本地访问权限才能创建初始管理员用户”。但是在本地运行它,它工作正常。
另一件事是,如果我想使用 Postgres db 而不是嵌入式 H2 db,那么我应该创建表来存储用户、客户端和范围等吗?如果是,我怎样才能获得所有表的数据库结构?

我要声明一个泛型类,将上三胞胎的工作- key,value和metadata。
该key和value字段是强制性的,但该metadata字段是可选的。
class Triplet<K,V,M>{
K key;
V value;
M metadata;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
在使用上面的类时,我必须像下面一样初始化它 -
Triplet<Integer, String, String> t1 = new Triplet<>();
// Setters
Run Code Online (Sandbox Code Playgroud)
但对于某些用例metadata是可选的。所以当我null用作第三个类型参数时,编译器给出了一个错误 -
Triplet<Integer, String, null> t2 = new Triplet<>();
Run Code Online (Sandbox Code Playgroud)
我应该如何正确实例化适用于多种类型的参数化类型,其中使用站点指定的类型参数之一是可选的?
我有一个使用 Gradle 6.4 版和 JDK 8 构建的项目。我正在尝试将 Gradle插件用于测试装置( java-test-fixtures),但我在依赖项方面遇到了一些问题。
根据上面链接的 Gradle 页面,该项目的结构应如下所示:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
虽然该build.gradle.kts文件具有以下依赖项部分:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
现在,在testFixtures/java源文件夹中的 IntelliJ(我正在使用的 IDE)类中查看源文件夹中的类main/java。所以我可以在下面添加新的 Java 类testFixtures/java,这些类依赖于main. 但是,我将无法从外部库导入依赖项com.my.external.project:1.0。当我尝试运行 Gradle 任务时,问题得到确认compileTestFixturesJava。
我可以复制该dependencies部分中的条目;例如我可以添加:
dependencies {
api("com.my.external.project:1.0")
// ... more API dependencies
testFixturesCompileOnly(project(":core-module")) …Run Code Online (Sandbox Code Playgroud) java dependency-management gradle gradle-kotlin-dsl java-test-fixtures
我正在将旧的 Java 应用程序转换为模块化的应用程序。它是一个 Gradle 项目,依赖项如下所示:
dependencies {
implementation 'org.jopendocument:jOpenDocument:1.3'
implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)
在 App 类中,我的导入是:
dependencies {
implementation 'org.jopendocument:jOpenDocument:1.3'
implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 module-info.java 文件。但是当我这样做时,我的应用程序将无法编译,因为requiresmodule-info 文件中的指令是错误的。
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Serializer;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
Run Code Online (Sandbox Code Playgroud)
模块名称xom和jOpenDocument不足。但是我不知道这些依赖项应该是什么,也不知道如何重新配置 Gradle;如果那是我需要做的。
当我省略任一requires语句时,相应的imports 无法解析。我没有查看 JAR 文件。但我不认为任何一个工件是模块化的。
我正在使用 Gradle 5.6.2,我的目标是 Java 11。
java java-platform-module-system java-module module-info java-11
我有一个使用 Spring Boot 和 Swagger 的 Java 项目。该项目由一个实现单个端点的简单 API 控制器组成。GET调用端点上的方法获取所有用户。在同一端点上调用该PUT方法会更新单个用户:
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@RequestMapping(value = "", method = RequestMethod.GET)
public List<BaseUser> getUsers(String name) {
return null;
}
@RequestMapping(value = "", method = RequestMethod.PUT)
public BaseUser updateUser(@RequestBody BaseUser user) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
端点/api/v1/users是使用BaseUser具有如下子类型的a 实现的EmployeeUser:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = EmployeeUser.class, name = "employee")
})
public abstract class BaseUser {
private final int …Run Code Online (Sandbox Code Playgroud) 我有一个Stream<Set<Integer>> intSetStream.
我可以这样做...
Set<Integer> theSetWithTheMax = intSetStream.max( (x,y)->{ return Integer.compare( x.size(), y.size() ); } ).get( );
Run Code Online (Sandbox Code Playgroud)
...我掌握了其中元素Set<Integer>数量最多的Integer那个。
那太棒了。但我真正需要知道的是,这是第一次Set在Stream这最大?或者是10日Set在Stream?还是i第Set?其中哪一个元素最多?
所以我的问题是:有没有一些方法-使用Stream API -我可以确定“这是i个Set在Stream中Set传回他们所有的最大价值,为氏Set.size( )呼叫”?
我能想到的最佳解决方案是迭代Stream<Set<Integer>>(使用intSetStream.iterator())并进行手动max( )计算。但我希望学习更多Stream-y 的方法;如果有这样的事情。
java ×4
java-11 ×2
java-8 ×2
keycloak ×2
spring-boot ×2
docker ×1
generics ×1
gradle ×1
java-14 ×1
java-module ×1
java-platform-module-system ×1
java-stream ×1
module-info ×1
postgresql ×1
spring ×1
springfox ×1
swagger ×1