1

我正在为 Java Web 应用程序使用HDIV Web 应用程序安全框架。每个新的网页请求都会生成 hdiv 内部安全信息,这些信息会被缓存并用于安全检查。

我有以下情况:

我有一个订单页面,当有东西被添加到购物车或从购物车中删除时,它会弹出一个确认页面 2 秒钟。

50 个弹出窗口后,底层订单页面将从缓存中删除,因此应用程序中会出现错误。

有谁知道如何影响 hdiv 缓存删除策略以保持基本页面处于活动状态?

一种解决方法是将 org.hdiv.session.StateCache.maxSize 从 50 增加到 500。

但这只会治标不治本。

更新:

使用@rbelasko 解决方案我成功地使用原始org.hdiv.session.StateCache将 maxSize 更改为 20 并在调试日志中验证缓存在 20 个条目后被解除。

当我将其更改为使用我自己的实现时,它不起作用

豆定义

<bean id="cache" class="com.mycompany.session.StateCacheTest" singleton="false" 
  init-method="init">
    <property name="maxSize">
        <value>20</value>
    </property>
</bean>

我自己的班级

public class StateCacheTest extends StateCache
{
    private static final Log log = LogFactory.getLog(StateCacheTest.class);

    public StateCacheTest()
    {
        log.debug("StateCache()");
    }

    @Override
    public void setMaxSize(final int maxSize)
    {
        super.setMaxSize(maxSize);

        if (log.isDebugEnabled())
        {
            log.debug("setMaxSize to " + maxSize);
        }
    }
}

在调试日志中没有来自 StateCacheTest 的条目

有任何想法吗?

更新 2:

虽然我无法通过 spring 加载不同的 IStateCache 实现,但我能够使用

<hdiv:config ... maxPagesPerSession="200" ... />

bean 设置定义

<property name="maxSize">
    <value>20</value>
</property>

对我系统中的缓存大小没有影响。

4

1 回答 1

1

您可以创建自定义IStateCache接口实现。

使用 HDIV 显式配置(不使用 HDIV 的新自定义模式)这是“缓存”bean 的默认配置:

<bean id="cache" class="org.hdiv.session.StateCache" singleton="false" 
  init-method="init">
    <property name="maxSize">
        <value>200</value>
    </property>
</bean>

You could create your own implementation and implement the strategy that fits your requirements.

Regards,

Roberto

于 2012-02-24T20:32:41.513 回答