快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰上线了_龟发之家论坛



择要

在一个有密码保护的Web利用傍边,精确妥善的处置惩罚用户退出历程并不仅仅只必要调用HttpSession工具的invalidate()措施,由于现在大年夜部分浏览器上都有退却撤退(Back)和提高(Forward)按钮,容许用户退却撤退或提高到一个页面。

在用户退出一个Web利用之后,假如按了退却撤退按钮,浏览器把缓存中的页面出现给用户,这会应用户孕育发生疑心,他们会开始担心他们的小我数据是否安然。

实际上,许多Web利用会弹出一个页面,警告用户退出时关闭全部浏览器,以此来阻拦用户点击退却撤退按钮。还有一些应用JavaScript,但在某些客户端浏览器中这却不必然起感化。这些办理规划大年夜多半实现都很愚蠢,且不能包管在任何环境下都100%有效,同时,它还要求用户有必然的操作履历。

这篇文章以简单的法度榜样示例阐述了精确办理用户退出问题的规划。作者Kevin Le首先描述了一个抱负的密码保护Web利用,然后以示例法度榜样解释问题若何孕育发生并评论争论办理问题的规划。文章虽然是针对JSP进行评论争论阐述,但作者所阐述的观点很轻易理解而且能够为其他Web技巧所采纳。着末着末,作者Kevin Le用Jakarta Struts更为优雅地办理用户退出问题。文中包孕JSP和Struts的示例法度榜样 (3,700 words; September 27, 2004)

大年夜部分Web利用不会包孕像银行账户或信用卡资料那样机密的信息,然则一旦涉及到敏感数据,就必要我们供给某些密码保护机制。例如,在一个工厂傍边,工人必须经由过程Web利用法度榜样造访他们的光阴安排、进入他们的培训课程以及查看他们的薪金等等。此时利用SSL(Secure Socket Layer)就有些大年夜材小用了(SSL页面不会在缓存中保存,关于SSL的评论争论已经越过本文的范围)。然则这些利用又确凿必要某种密码保护步伐,否则,工人(在这种环境下,也便是Web利用的应用者)就可以发明工厂中所有员工的私人机密信息。

类似上面的环境还包括位于公共藏书楼、病院、网吧等公开场合的谋略机。在这些地方,许多用户合营应用几台谋略机,此时保护用户的小我数据就显得至关紧张。 同时利用法度榜样的优越设计与实现对用户专业常识以及相关培训要求少之又少。

让我们来看一下现实天下中一个完美的Web利用是如何事情的:

1. 用户在浏览器中输入URL,造访一个页面。

2. Web利用显示一个登岸页面,要求用户输入有效的验证信息。

3. 用户输入用户名和密码。

4. 假设用户供给的验证信息是精确的,颠最后验证历程,Web利用容许用户浏览他有权造访的区域。

5. 退出时,用户点击页面的退出按钮,Web利用显示确认页面,扣问用户是否真的必要退出。一旦用户点击确定按钮,Session停止,Web利用从新定位到登岸页面。用户现在可以宁神的脱离而不用担心他的信息会被泄露。

6. 另一个用户坐到了同一台电脑前。他点击退却撤退按钮,Web利用不应该显示上一个用户造访过的任何一个页面。

事实上,Web利用将不停停顿在登岸页面上,除非第二个用户供给精确的验证信息,之后才可以造访他有权限的区域。

经由过程示例法度榜样,文章向您阐述了若何在一个Web利用中实现上面的功能。

一. JSP samples

为了更为有效地向您阐明这个办理规划,本文将从展示一个Web利用logoutSa澳门新葡亰上线了mpleJSP1中碰着的问题开始。这个示例代表了许多没有精确办理退出历程的Web利用。logoutSampleJSP1包孕一下JSP页面:login.jsp, home.jsp, secure1.jsp, secure2.jsp, logout.jsp, loginAction.jsp, 和 logoutAction.jsp。此中页面home.jsp, secure1.jsp, secure2.jsp, 和 logout.jsp是不容许未经认证的用户造访的,也便是说,这些页面包孕了紧张信息,在用户登岸之前或者退出之后都不应该显示在浏览器中。login.jsp页面包孕了用于用户输入用户名和密码的form。logout.jsp页面包孕了要求用户确认是否退出的form。loginAction.jsp和logoutAction.jsp作为节制器分手包孕了登岸和退出动作的代码。

第二个Web示例利用logoutSampleJSP2展示了若何矫正示例logoutSampleJSP1中的问题。然则第二个示例logoutSampleJSP2自身也是有问题的。在特定环境下,退出问题依然存在。

第三个Web示例利用logoutSampleJSP3对logoutSampleJSP2进行了改进,对照妥善地办理了退出问题。

着末一个Web示例logoutSampleStruts展示了JakartaStruts若何优雅地办理退出问题。

留意:本文所附示例在最新版本的Microsoft Internet Explorer (IE), Netscape Navigator, Mozilla, FireFox和Avant浏览器上测试经由过程。

二. Login action

Brian Pontarelli的经典文章 《J2EE Security: Container Versus Custom》 评论争论了不合的J2EE认证措施。文章同时指出,HTTP协讲和基于form的认证措施并不能供给处置惩罚用户退出问题的机制。是以,办理措施就是引入用户自定义的安然实现机制,这就供给了更大年夜的机动性。

在用户自定义的认证措施中,普遍采纳的措施是从用户提交的form中得到用户输入的认证信息,然后到诸如LDAP (lightweight directory access protocol)或关系数据库(relational database management system, RDBMS)澳门新葡亰上线了的安然域中进行认证。假如用户供给的认证信息是有效的,登岸动作在HttpSession工具中保存某个工具。HttpSession存在着保存的工具则表示用户已经登岸到Web利用傍边。为了方便起见,本文所附的示例只在HttpSession中保存一个用户名以注解用户已经登岸。清单1是从loginAction.jsp页面中节选的一段代码以此解说登岸动作:

Listin澳门新葡亰上线了g 1

//...

//initialize RequestDispatcher object; set forward to home page by default

RequestDispatcher rd = request.getRequestDispatcher( "home.jsp" );

//Prepare connect澳门新葡亰上线了ion and statement

rs = stmt.executeQuery( "select password from USER where userName = '" + userName + "'" );

if (rs.next()) {

//Query only returns 1 record in the result set;

//Only 1 password per userName which is also the primary key

if (rs.getString( "password" ).equals(password)) { //If valid password

session.setAttribute( "User" , userName); //Saves username string in the session object

}

else { //Password does not match, i.e., invalid user password

request.setAttribute( "Error" , "Invalid password." );

rd = request.getRequestDispatcher( "login.jsp" );

}

} //No record in the result set, i.e., invalid username

else {

request.setAttribute( "Error" , "Invalid user name." );

rd = request.getRequestDispatcher( "login.jsp" );

}

}

//As a controller, loginAction.jsp finally either forwards to "login.jsp" or "home.jsp"

rd.forward(request, response);

/澳门新葡亰上线了/...

本文傍边所附Web利用示例均以关系型数据库作为安然域,但本问所讲述的内容同样适用于其他任何类型的安然域。

三. Logout action

退出动作包孕删除用户名以及调用用户的HttpSession工具的invalidate()措施。清单2是从loginoutAction.jsp中节选的一段代码,以此阐明退出动作:

Listing 2

您可能还会对下面的文章感兴趣: