Jeesite框架自定义上下文对象:ctx和${ctxStatic}

Jeesite框架自定义上下文对象:ctx${ctxStatic}

假设工程名为web

默认已存在:ctx:/web/a

                     ctxAdmin:/web/a

                     ctxPath:/web

                     ctxFront:/web/f

                     ctxStatic:/web/static

自定义方式:先写一个InitializingBean实现类,初始化后给Beetl设置共享变量即可,代码如下

package com.jeesite.modules;

import com.jeesite.common.beetl.BeetlUtils;
import com.jeesite.common.collect.MapUtils;
import org.beetl.core.GroupTemplate;
import org.springframework.beans.factory.InitializingBean;

import java.util.Map;

/**
 * xcf 增加上下文变量
 * 实现InitializingBean类,初始化后给Beetl设置共享变量
 */
public class BeetlInitializingBean implements InitializingBean {
    private GroupTemplate groupTemplate;

    public BeetlInitializingBean() {
        afterPropertiesSet();
    }
    @Override
    public void afterPropertiesSet()  {
        // 设置Beetl GroupTemplate,如果不设置,取上下文中唯一的GroupTemplate对象
        this.groupTemplate = BeetlUtils.getResourceGroupTemplate();

        // 设置Beetl全局变量
        Map<String, Object> sharedVars = this.groupTemplate.getSharedVars();
        if (sharedVars == null){
            sharedVars = MapUtils.newHashMap();
        }
        sharedVars.put("ctxf", "/web/f");
       // sharedVars.put("你的全局变量名2,如ctxStatic2", '你的全局变量值如ctxPath/static2');
        this.groupTemplate.setSharedVars(sharedVars);
    }
}

groupTemplate不能自己进行实例化,根据示例,通过BeetlUtils获取

然后需要在Application中调用

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
   
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
      //xcf 增加上下文变量
      new BeetlInitializingBean();
   }

}

至此已成功添加上下文变量ctxf

### 自定义上下文配置方法 在不同的技术框架或系统中,`ctx`(即上下文对象)通常用于存储传递请求处理过程中所需的状态信息。自定义上下文配置可以根据具体需求实现,以下是一些常见的配置方法实践。 #### 1. 在 HTTP 请求处理中自定义上下文 在 Go 语言中,可以通过 `context` 包来创建管理上下文。例如,在调用 `Publish` 方法时,可以为每次调用设置一个带有超时的上下文,以确保在指定时间内完成操作: ```go type publishHandler struct { pub publisher } func (h publishHandler) publishPosition(position flight.Position) error { ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second) defer cancel() return h.pub.Publish(ctx, position) } ``` 这段代码展示了如何在 Go 中使用 `context.WithTimeout` 创建一个带有超时的上下文,并将其传递给 `Publish` 方法[^1]。 #### 2. 在 Sa-Token 框架自定义上下文 Sa-Token 是一个轻量级的权限认证框架,它允许开发者通过自定义上下文来增强请求处理的安全性。为了在请求处理之前正确初始化 Sa-Token 上下文,可以按照以下步骤进行配置: ```kotlin server.before { ctx -> val saTokenContext = SaTokenContextImpl(ctx) SaManager.setSaTokenContext(saTokenContext) } ``` 在这个例子中,`SaTokenContextImpl` 是一个实现了 `SaTokenContext` 接口的类,它负责将当前请求的上下文传递给 Sa-Token 框架。通过这种方式,可以在整个请求生命周期中访问到当前用户的认证授权信息[^2]。 #### 3. 在 Jeesite 框架自定义上下文对象 Jeesite 是一个基于 Spring Boot 的快速开发平台,它提供了灵活的模板引擎支持。通过实现 `InitializingBean` 接口,可以在应用启动时初始化上下文变量,并将其设置为模板引擎的全局变量: ```java package com.jeesite.modules; import com.jeesite.common.beetl.BeetlUtils; import com.jeesite.common.collect.MapUtils; import org.beetl.core.GroupTemplate; import org.springframework.beans.factory.InitializingBean; import java.util.Map; public class BeetlInitializingBean implements InitializingBean { private GroupTemplate groupTemplate; public BeetlInitializingBean() { afterPropertiesSet(); } @Override public void afterPropertiesSet() { this.groupTemplate = BeetlUtils.getResourceGroupTemplate(); Map<String, Object> sharedVars = this.groupTemplate.getSharedVars(); if (sharedVars == null) { sharedVars = MapUtils.newHashMap(); } sharedVars.put("ctxf", "/web/f"); this.groupTemplate.setSharedVars(sharedVars); } } ``` 这段代码展示了如何在 Jeesite 中通过 `InitializingBean` 实现类来设置 Beetl 模板引擎的全局变量。`ctxf` 被设置为 `/web/f`,这样在模板中就可以直接使用这个变量来引用静态资源路径[^3]。 #### 4. 在异步任务中管理上下文 在处理异步任务时,保持上下文的一致性非常重要。JavaScript 中的 `Promise` 链 `async/await` 提供了一种优雅的方式来管理异步任务的上下文。例如,在 `setTimeout` 或 `watch` 回调中,可以通过闭包来捕获传递上下文中的变量: ```javascript function delayedGreeting(name) { setTimeout(() => { console.log(`Hello, ${name}`); }, 1000); } delayedGreeting('Alice'); ``` 在这个例子中,`name` 变量通过闭包被捕获,并在 `setTimeout` 回调中使用,从而保持了上下文的一致性。 #### 5. 在网络请求中传递上下文 在网络请求中,上下文通常包含请求头、认证令牌等信息。例如,在使用 Axios 进行 HTTP 请求时,可以在拦截器中获取修改请求配置,以确保上下文信息被正确传递: ```javascript axios.interceptors.request.use(config => { config.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token'); return config; }); ``` 这段代码展示了如何在 Axios 的请求拦截器中添加认证令牌到请求头中,从而确保每次请求都携带了必要的上下文信息。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值