我有一个用 C++ 编写的 Qt 程序的源代码片段,在 Linux 下运行,它创建一个 QFileDialog 来打开现有文件。如果我执行此操作,一切似乎都正常,但是当创建对话框时,我收到一条警告说“Gtk-Message: GtkDialog 没有临时父项映射”。
在另一个线程中,我发现调用这个函数“gtk_window_set_transient_for()”可以修复这个错误。但是这个函数是 GTK 库的一部分,但我使用的是 Qt 框架。那么是否有任何解决方案可以修复此错误?
此对话框的父级是 QMainWindow:
QString filename = QFileDialog::getOpenFileName(this, "Open File");
Run Code Online (Sandbox Code Playgroud) 初始情况的简要描述:让我们假设一个基于 Spring Boot 的 RESTful API 充当 OAuth2 资源服务器。资源服务器使用 Spring Security 5 和常见方法进行配置。外部授权服务器按照 JWT 声明传递用户信息(例如电子邮件、名字、姓氏),并在客户端进行身份验证时接收到。授权服务器保存的通用用户信息通过资源服务器特定用户信息(例如业务角色、域UID)进行扩展。域用户由来自两个数据源的信息组成:
从未通过 JWT 在资源服务器上进行身份验证的新用户将在资源服务器的数据库中创建。资源服务器的数据库相应地包含每个使用资源服务器的API的用户的用户实体,由授权服务器同步的信息和资源服务器的业务逻辑补充的信息组成。
public class User {
// Information synchronized from Authorization Server
private String subject;
private String preferredUsername;
private String firstName;
private String lastName;
private String email;
// Information added by Resource Server's business logic
private UUID id;
private String businessRole;
}
Run Code Online (Sandbox Code Playgroud)
域用户的同步是通过侦听 AuthenticationSuccessEvent 并在数据库中创建用户或根据需要更新用户来执行的。总而言之,对于由主题声明标识的每个 OAuth2 用户,数据库中有一个包含特定于域的附加信息的域配置文件。
本文也清晰地描述了这种用户数据的同步和分发。
现在讨论实际问题:虽然 OAuth2 范围控制应用程序拥有哪些权限,但还必须控制用户拥有哪些权限。用户授权是特定于域的,并记录在资源服务器的数据库中。例如,用户应该只能删除他创建的评论。此类访问控制无法通过 OAuth2 范围进行控制。顺便说一句,我正在讨论使用or的 Spring 方法安全性。@PreAuthorize …
假设我有一个最小的 RESTful 控制器,如下所示,顺便使用 Java 8 和 Spring Boot 2,......
@RestController
class MyController {
@Autowired
private PostService service;
@GetMapping
public Post get() {
return service.getLatest();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用 Spring Security 模块成功保护了这条路线。现在我只想允许资源所有者访问此资源。对于资源所有者,我的意思是创建者或简单地说:
Post myPost = new Post();
...
myPost.getCreator().equals(currentUser); // Should be true when access is granted
Run Code Online (Sandbox Code Playgroud)
我发现了很多关于基于角色的访问,但几乎没有检查所有权......当然我可以在控制器中放置一个 if 语句并抛出异常,但我打算使用类似 Spring 的Expression-Based Access Control之类的东西。
还有其他想法吗?有人有关于资源所有权检查的好主意或示例吗?
我没有真正意义上的问题,但我会尽力澄清内容问题。假设我们有一个微内核(PC Intel x86;32 位保护模式),具有针对每个 CPU 异常工作的中断描述符表 (IDT)和中断服务例程 (ISR)。ISR 被成功调用,比如在出现Division by Zero异常的情况下。
global ir0
extern isr_handler
isr0:
cli
push 0x00 ; Dummy error code
push %1 ; Interrupt number
jmp isr_exc_handler
isr_exc_handler:
; Save the current processor state
pusha
mov ax, ds
push eax
mov ax, 0x10 ; Load kernel data segment descriptor
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
; Push current stack pointer
mov eax, esp
push eax …Run Code Online (Sandbox Code Playgroud) 让我们假设一个自定义的基本JpaRepository实现如下所示。
public class SimpleCustomJpaRepository<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements CustomJpaRepository<T, ID> {
@Override
public List<T> findAllCustom() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
基础存储库是使用@EnableJpaRepositories注释注册的。
@EnableJpaRepositories(value = "org.somebody.repository", repositoryBaseClass = SimpleCustomJpaRepository.class)
Run Code Online (Sandbox Code Playgroud)
UserRepository我应该如何为扩展接口配置集成测试CustomJpaRepository,并因此应该使用自定义基本实现?
public interface UserRepository extends CustomJpaRepository<User, Long> { ... }
Run Code Online (Sandbox Code Playgroud)
当前使用的集成测试失败并显示org.springframework.data.mapping.PropertyReferenceException: No property findAllCustom found for type User!。实际上,它无法加载,ApplicationContext因为我的自定义基础存储库实现在集成测试期间未注册,因此未findAllCustom找到 的实现。
@ExtendWith(SpringExtension.class)
@DataJpaTest
class UserRepositoryTest {
@Autowired
private UserRepository userRepository.
}
Run Code Online (Sandbox Code Playgroud)
JpaRepository我应该如何结合 JPA 存储库集成测试来注册自定义实现?