3.2.11.3. 安全上下文

SecurityContext 类实例存储关于当前执行线程的用户会话信息。它在以下情况下被创建并传递给 AppContext.setSecurityContext() 方法:

  • 对于 Web 客户端 block 和 Web 门户 block - 在开始处理用户浏览器的每个 HTTP 请求时。

  • 对于中间件 block - 在开始处理来自客户端层和 CUBA 计划任务 的每个请求时。

在前两种情况下,当请求执行完成时,将从执行线程中删除 SecurityContext

如果通过应用程序代码创建一个新的执行线程,需要将当前的 SecurityContext 实例传递给它,示例如下:

  1. final SecurityContext securityContext = AppContext.getSecurityContext();
  2. executor.submit(new Runnable() {
  3. public void run() {
  4. AppContext.setSecurityContext(securityContext);
  5. // business logic here
  6. }
  7. });

使用 SecurityContextAwareRunnableSecurityContextAwareCallable 封装类可以完成同样的操作,例如:

  1. executor.submit(new SecurityContextAwareRunnable<>(() -> {
  2. // business logic here
  3. }));
  1. Future<String> future = executor.submit(new SecurityContextAwareCallable<>(() -> {
  2. // business logic here
  3. return some_string;
  4. }));