tomcat与java和mysql_我如何使用JDBC和Tomcat和MySQL域吗?

身份验证可以由一个web应用程序控制或由容器(比如Tomcat年代Wweb应用程序中运行)。 Tomcat容器管理的安全是基于领域。 领域包含了用户的姓名,密码,和角色。

我配置了Tomcat(5.5.20版)是一个UserDatabase领域一个活跃的领域。 UserDatabase领域使用tomcat用户。 Tomcat的配置目录中的xml文件位置的名称,密码,和角色数据。 从这个文件将Tomcat启动时加载数据,而不是在其他时间。 通常您需要修改这个文件手动更新它,所以它可能是在开发过程中最有用的而不是一个实际生产系统。

Tomcat可以配置为其他更健壮的领域选择。 这样的一个替代方法是一个JDBCW领域。 JDBC域在UserDatabase域的好处包括能够在运行时动态更新JDBC域数据,而不是只在启动时。 在Tomcat的服务器。 xml文件中,我们可以看到UserDatabase域注释而样本JDBC域为MySQLW注释掉:

部分Tomcat的服务器。 xml文件

...

resourceName="UserDatabase"/>

...

...

现在,让我们创建一个MySQL数据库W存储领域的用户名、密码和角色。 我在我的机器上已经安装了MySQL。 我将运行以下create_tomcat_realm_database。 sql脚本创建一个“tomcat_realm”数据库:

DROP DATABASE IF EXISTS tomcat_realm;

CREATE DATABASE tomcat_realm;

USE tomcat_realm;

CREATE TABLE tomcat_users (

user_name varchar(20) NOT NULL PRIMARY KEY,

password varchar(32) NOT NULL

);

CREATE TABLE tomcat_roles (

role_name varchar(20) NOT NULL PRIMARY KEY

);

CREATE TABLE tomcat_users_roles (

user_name varchar(20) NOT NULL,

role_name varchar(20) NOT NULL,

PRIMARY KEY (user_name, role_name),

CONSTRAINT tomcat_users_roles_foreign_key_1 FOREIGN KEY (user_name) REFERENCES tomcat_users (user_name),

CONSTRAINT tomcat_users_roles_foreign_key_2 FOREIGN KEY (role_name) REFERENCES tomcat_roles (role_name)

);

INSERT INTO tomcat_users (user_name, password) VALUES ('deron', 'deronpass');

INSERT INTO tomcat_users (user_name, password) VALUES ('larry', 'buythecompetition');

INSERT INTO tomcat_roles (role_name) VALUES ('dude');

INSERT INTO tomcat_roles (role_name) VALUES ('manager');

INSERT INTO tomcat_users_roles (user_name, role_name) VALUES ('deron', 'dude');

INSERT INTO tomcat_users_roles (user_name, role_name) VALUES ('deron', 'manager');

INSERT INTO tomcat_users_roles (user_name, role_name) VALUES ('larry', 'dude');

COMMIT;

对于一个JDBC域,您需要一个数据库基本上有两个表。 需要列一个表,用户名和密码的另一个列。 第二个表需要一个用户名和一个列列的角色。 数据库、表和列可以命名为任何你希望他们透露姓名,因为他们可以指定在server.xml JDBC域条目。 但是,用户名称列第一个表和第二个表的用户名列需要具有相同的名称。

create_tomcat_realm_database。 sql是比这更多的“正确性”。 它创建了一个“tomcat_users”表用户名(user_name列)和密码(密码列),它集user_name为主键列。 它创建了一个“tomcat_roles”表来存储role_name中的角色名称列,设置为主键。 它创建了一个“tomcat_users_roles”表,包含用户名(user_name列)及其相关的角色(role_name列)。 user_name列和role_name列被设置为tomcat_users_roles的主键。 添加外键约束为引用完整性确保tomcat_users_roles中指定的user_name tomcat_users_roles存在于tomcat_users,role_name tomcat_users_roles存在于tomcat_roles中指定。 脚本也插入一些用户名,密码,和角色到数据库表中。

我把脚本放在C:\。 我登录到mysqlW作为根用户登录数据是我的我的。 ini文件)并执行脚本通过:

SOURCE C:\create_tomcat_realm_database.sql

脚本的执行所示:

7887dd154764f74daa5369e853590ee3.gif

我会确认表存在通过“使用tomcat_realm;”和“显示表;

use tomcat_realm;

show tables;

d59f3dcdd462019573f488656fce7a12.gif

接下来,我将创建一个Tomcat的用户可以使用它来访问tomcat_realm数据库。 我叫用户“realm_access”。 我将授予用户能够选择从所有的tomcat_realm表。

USE mysql;

CREATE USER 'realm_access'@'localhost' IDENTIFIED BY 'realmpass';

GRANT SELECT ON tomcat_realm.* TO realm_access@localhost;

a5b9ece17826e36e35dfd6db39f7e9fd.gif

接下来,我将更新我的Tomcat年代W服务器。 xml文件连接到MySQLW领域的数据库W我刚刚创建的。 我就注释掉UserDatabase领域部分。 我将创建一个JDBCW域条目包含所有正确的信息,如下所示:

部分Tomcat的服务器。 xml文件

...

...

driverName="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/tomcat_realm"

connectionName="realm_access" connectionPassword="realmpass"

userTable="tomcat_users" userNameCol="user_name" userCredCol="password"

userRoleTable="tomcat_users_roles" roleNameCol="role_name" />

...

在这之后,我们需要把MySQL jarW文件到Tomcat的类路径中W这样Tomcat和MySQL数据库。 如果我们不这样做,我们将会收到一条错误消息,当Tomcat启动时,如:

例外的例子发生在MySQL jar文件并没有被添加到Tomcat的类路径:

...

Jul 6, 2008 4:38:39 PM org.apache.catalina.realm.JDBCRealm start

SEVERE: Exception opening database connection

java.sql.SQLException: com.mysql.jdbc.Driver

at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:689)

at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:766)

...

我将添加mysql-connector-java-5.0.4-bin。 jar文件到我的Tomcat的常见/ lib目录中。 当Tomcat启动时,它会找到共同的jar文件/ lib。 然而,(注意,我要通过一个Eclipse运行Tomcat年代W项目,所以我需要MySQL jar文件添加到我的项目的类路径中。 在这不久…)

3f9b8d241bf01fc0e6ef7b965f1a0a22.gif

接下来,我将配置一个Eclipse项目运行在Tomcat中对JDBC使用基本身份验证领域我们设置。 我介绍如何建立一个Eclipse项目运行Tomcat另一个教程。 我将为我的“tomcat-demo”项目添加一个内容我的Tomcat服务器。 xml文件。

我的“tomcat-demo”项目的结构如下所示。 该项目包括一个单独的servletW。

b91edcb0e6269b211022a896834d2893.gif

这里所示的TestServlet类。 它输出一个简单的消息。

package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("This is the Test Servlet");

}

}

项目的web . xmlW文件所示。 它包含一个< servlet >条目测试servlet,< servlet映射>条目,将请求映射到测试servlet /测试。

请注意部分。 本节中指定的任何请求应用程序(“/ *”地图所有请求)要求请求用户认证与一个角色的“家伙”来访问该应用程序。 < auth方法>指定我们将使用基本身份验证。

<?xml version="1.0" encoding="UTF-8"?> TestServlettest.TestServletTestServlet/testWildcard means whole app requires authentication/*GETPOSTdudeNONEBASIC

我需要将MySQL驱动程序jar添加到项目的构建路径,因为我会从Eclipse运行Tomcat。 我将添加外部jar。 注意到Tomcat罐子已经使用一个Eclipse用户库添加到项目中。 这是覆盖着另一个教程。

84097e5688be277c55879dd3a2cef213.gif

接下来,我将在Tomcat启动“tomcat-demo”项目年代W在Eclipse中年代W。

4d92b5acaac1d85f6757951882552626.gif

在浏览器中,我将试图测试servletW通过http://localhost:8080 / tomcat-demo /测试。 因为我们使用基本身份验证,这是一个受保护的资源,会出现一个弹出窗口要求名字和密码。

8478f8f1ed6c888da04837de5ac3fca2.gif

我会进入一个无效的用户名和密码。 这并不工作。

41af67b114c824225e55136a24fdd051.gif

我将进入一个好名字和密码。 在我们tomcat_realm数据库W,我们创建了一个名为“德隆”的用户的密码“deronpass”。 “德隆”用户的角色“老兄”和“经理”。 因为我们的web . xmlW指定用户的角色“家伙”是必需的,“德隆”/“deronpass”应该工作。

3be8f99d1d1fb5bf4002152da10a381a.gif

用户名和密码进行验证,我们授予访问测试servlet。

44a058842a139e6fc233b03500229aba.gif

在本教程中,我们看到,这是相当简单的设置Tomcat JDBCW与MySQL域W为了执行基于容器的认证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值