我正在为员工管理系统创建一个 Web 应用程序,使用:Apache Tomcat 作为 HTTP 服务器,Oracle 作为数据库,Applet 用于客户端编程,Servlet 用于服务器端编程。我还想使用 DBCP 来管理与数据库的连接。
我希望执行查询的 servlet 使用客户端输入的用户名和密码进行连接。但是到目前为止,我已经看到在context.xml
中配置资源时必须设置连接池的用户名和密码。
有什么方法可以实现这个并且仍然使用 DBCP?或者我是否必须为每个请求在 doGet()
和 doPost()
中打开连接?
最佳答案
如评论中所述,通常,限制逻辑是在应用程序端而不是数据库端完成的。
但是如果你真的想使用数据库安全模型,那么你需要为每个登录用户创建单独的数据源(ConnectionPool)并将其存储在它的 session 中。如果您有很多并发访问,您很快就会发现资源用完了。
例如,我正在使用 DataSource,因为它更容易配置,但您可以只使用任何连接池实现。
在登录操作中,您创建新的数据源(例如使用 apache common:http://commons.apache.org/proper/commons-dbcp/)并插入到 session 中
BasicDataSource ds = new BasicDataSource();
...
ds.setPassword(userPassword);
ds.setUserName(login);
...
HttpSession session = request.getSession();
session.setAttribute("DBcon",ds);
在您的其他获取/帖子中:
HttpSession session = request.getSession();
DataSource ds = (DataSource)session.getAttribute("DBcon");
由于每个用户一个数据源,请确保使用池的一些低参数,例如 size=3,因为它对一个用户来说应该足够了。
关于java - Java Servlet 中的数据库连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549495/