我正在为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>
您可以创建自己的实现并实施适合您要求的策略。
问候,
罗伯托