java – 限制访问Spring MVC控制器 – 一次N个会话
发布时间:2020-12-14 06:05:31 所属栏目:Java 来源:网络整理
导读:我们已经许可了商业产品(在这种情况下不重要的产品),这受到并发用户数量的限制.用户通过 Spring Controller访问此产品. 我们拥有此产品的N个许可证,如果N 1个用户访问它,则会收到有关需要购买更多许可证的错误消息.我想确保用户不会看到此消息,并且希望对产
我们已经许可了商业产品(在这种情况下不重要的产品),这受到并发用户数量的限制.用户通过
Spring Controller访问此产品.
我们拥有此产品的N个许可证,如果N 1个用户访问它,则会收到有关需要购买更多许可证的错误消息.我想确保用户不会看到此消息,并且希望对产品的请求只是“排队”,而不是让N 1个用户实际访问它.当然,他们更希望我购买许可证,因此他们的工具不会让我们本地执行此操作. 代替能够控制工具,我想限制控制器的并发会话数量永远不会超过N.其他人都可以等待. 我们正在使用Spring MVC. 有任何想法吗? 解决方法
你需要的是一个ObjectPool.查看Apache Commons Pool
http://commons.apache.org/pool
在应用程序启动时,您应该创建一个包含许可证或商业库对象的对象池(不确定它们具有哪种公共接口). public class CommercialObjectFactory extends BasePoolableObjectFactory { // for makeObject we'll simply return a new commercial object @Override public Object makeObject() { return new CommercialObject(); } } GenericObjectPool pool = new GenericObjectPool(new CommercialObjectFactory()); // The size of pool in our case it is N pool.setMaxActive(N) // We want to wait if the pool is exhausted pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_BLOCK) 当你需要代码中的商业对象时. CommercialObject obj = null; try { obj = (CommercialObject)pool.borrowObject(); // use the commerical object the way you to use it. // .... } finally { // be nice return the borrwed object try { if(obj != null) { pool.returnObject(obj); } } catch(Exception e) { // ignored } } 如果这不是您想要的,那么您需要提供有关商业图书馆的更多详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |