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

我有以下szenario:

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

在弹出50次后,底层订单页面将从缓存中删除,因此该应用中发生错误。

有谁知道如何影响hdiv缓存删除策略以保持基本页存活?

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

但这只能治愈症状,而不能根本原因。

更新:

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

当我更改它以使用自己的实现时,它没有用

Bean定义

<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" ... />


豆设置定义

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


对我系统中的cachesize没有影响。

最佳答案

您可以创建自定义的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>


您可以创建自己的实现并实施适合您要求的策略。

问候,

罗伯托

09-11 19:37