分享
 
 
 

WEB应用中的基本身份验证和表单身份验证

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

WEB应用中的基本身份验证和表单身份验证

Translated by Caiyi0903(Willpower),2004.4.23

在任何一种WEB应用开发中,不论大中小规模的,每个开发者都会遇到一些需要保护程序数据的问题,涉及到用户的LOGIN ID和PASSWORD。那么如何执行验证方式更好呢?实际上,有很多方式来实现。在本文里,我们不会把所有的验证方法都考虑到,我们的目的是让你学会如何以最简单最方便的验证方法来完成。下面将讨论基本的(BASIC)和基于表单的(FORM-BASED)验证方式。我们考虑使用TOMCAT作为WEB SERVER,它通过server.xml和web.xml文件提供基本的和基于表单的验证。JSP页面中的j_security_check 表单(for FORM-based) 需要两个参数:j_username和j_password。它们指定了在SQL数据库中的登陆角色。你能够看到,它的弹性化,可用性和必要性。

第一步,我们要下载TOMCAT和MYSQL,前者用来做WEB SERVER,后者用来做SQL SERVER。还要下载JDBCRealm工具,它在TOMCAT中使用,用来做MYSQL连接器,连接MYSQL数据库的。

我们假设你已经安装了TOMCAT和MYSQL,那么我们开始从SERVER的配置入手了。当然,你还需要安装JAVA的MYSQL连接驱动,我强烈建议只使用稳定的驱动版本,因为在有些情况下,alpha/beta版本的驱动不能正常工作。

下面我们来操作SQL数据库。老实说,MYSQL和TOMCAT是相当好的工具,它们都是跨平台的,不管你的操作系统是WINDOWS还是类似UNIX/LINUX的,它们都能正常运行。因此,不论运行环境,它们的配置过程都是绝对一样的。

MySQL

在命令行中执行mysql 客户端命令,然后输入:

create database weblogin;

这个将为你创建一个weblogin数据库,它将保存用户名和密码以及角色等一切信息。你对数据库所做的任何改变都会直接立即反映出来。比如说添加用户,改变用户密码和角色等。

create table users (

login varchar (15) not null,

pass varchar (15) not null,

primary key (login)

);

我们创建一个users表用来保存用户的LOGIN和PASSWORD:

create tables groups (

login varchar (15) not null,

group varchar (15) not null,

primary key (login, group)

);

如你看到的,我们要在group表里保存login属于哪个group的信息。下面,我们要插于一些数据用来测试使用,并完成MYSQL的配置工作:

insert into users ('green', 'testpwd');

insert into groups ('green', 'testgroup');

现在,我们创建了一个用户叫green,他的密码是testpwd,他属于testgroup这个用户组。接着,轮到TOMCAT的配置了。

Tomcat

TOMCAT本身并没有能力操作数据库来实现身份验证。但是可以依靠JDBCRealm。下面我们来使用它。

下面我们从TOMCAT的\conf\server.xml文件来开始我们的配置。打开这个文件并找到下面的内容:

<Realm className="org.apache.catalina.realm.MemoryRealm" />

删除这一行,或者用<!-- ... --> 注释掉它,我们要使用JDBCRealm。所以输入下面的内容:

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"

driverName="org.gjt.mm.mysql.Driver"

connectionURL="jdbc:mysql://localhost/weblogin?user=test&password=test"

userTable="users" userNameCol="login" userCredCol="pass"

userRoleTable="groups" roleNameCol="group" />

下面我们对field参数做详细讲解:

debug—这是我们设置的debug参数,数字越高显示信息越详细。

driverName—这个是MYSQL驱动的名字。要确保这个驱动的JAR包在TOMCAT的CLASSPATH中能够找到它。

connectionURL—这个是用来建立JDBC连接的数据库URL。在这个field里,weblogin是我们数据库的名字。user和password 是我们登陆数据库的用户数据。

userTable—一个定义有userNameCol和userCredCol字段的表。

userNameCol和userCredCol—users表里定义的login和pass。

现在,我们完成了配置过程。下面,我们要配置WEB应用程序来被这样一个身份验证方式保护起来。我们要举两个例子。最简单的是基本身份验证方式,然后就是基于表单的身份验证。在第一种情况里,我们尝试访问受保护的数据,将会有一个POP-UP窗口弹出提示你输入你的login和password。在第二种情况里,我们会通过页面的方式来让你通过身份验证。这个页面的内容可以是任意的,这个取决于你要使用怎么样的验证方式了。

基本身份验证方式(BASIC authorization method)

我们假设应用程序在TOMCAT的\webapps\webdemo, 我们要保护所有在admin 子目录里的文件。我们必须打开它的\webapps\webdemo\WEB-INF\web.xml文件,输入下列内容:

<security-constraint>

<web-resource-collection>

<web-resource-name>Web Demo</web-resource-name>

<url-pattern>/admin/*</url-pattern>

</web-resource-collection>

<auth-constraint>

<role-name>testgroup</role-name>

</auth-constraint>

</security-constraint>

<login-config>

<auth-method>BASIC</auth-method>

<realm-name>Web Demo</realm-name>

</login-config>

让我们来看看刚才输入的内容。我们为应用程序创建了一个web-resource-name并映射到login-config 。我们还定义了url-pattern, 它指明你受保护程序的路径。在login-conf中,我们定义了一个BASIC auth-method。

很简单,对吗?不要忘记了,在使改变生效前要停止并重启TOMCAT。

表单身份验证方式(FORM-based authorization method)

对于这种方式,我们仅仅只需要:

修改\webapps\webdemo\WEB-INF\web.xml

创建一个登陆用的JSP页面, 用户将在这里的HTML表单中输入他的登陆ID和密码

创建一个JSP error页面,一旦验证失败,用户将跳到该页面

如果你先尝试使用BASIC验证方式,你只需要改变login-config 为下面那一段代码。否则,你需要输入security-constraint代码段。使用下面的login-config:

<login-config>

<auth-method>FORM</auth-method>

<realm-name>Web Demo</realm-name>

<form-login-config>

<form-login-page>/admin/login.jsp</form-login-page>

<form-error-page>/admin/error.jsp</form-error-page>

</form-login-config>

</login-config>

我们设置表单的auth-method并定义了form-login-config。这个将使得TOMCAT使用 \admin\login.jsp页面来让用户登陆,使用\admin\error.jsp页面来处理登陆失败。

你可以使用任何你想要的出错信息。页面唯一需要的就是下面的HTML表单标签,你要插到页面中:

...

<form method="POST" action="j_security_check">

<input type="text" name="j_username">

<input type="text" name="j_password">

<input type="submit" value="Log in">

</form>

...

布局,风格,或其他所有你喜欢的。这个error页面能够做成任何你想要的。无非就是通知用户,验证失败了。

OK,全部完成了。你需要停止和重启一遍TOMCAT使得改变生效。

© Olexiy Prokhorenko, http://www.7dots.com/resume/

Co-author: Alexander Prohorenko

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有