概述
1。总体结构
JSP页面显示输入页面,Servlet(或者JSP)处理出入(服务器端验证)并设置Session以及设置跳转。
2。登陆页面(JSP),实现客户端基础验证(JS),并进行安全设置:
2.1 图片代替提交按钮:
<a href="javascript:fnLogin(); " onMouseover="javascript: window.status='Login to ...'; return true" onMouseout="javascript: window.status='';return true"><img src="images/go.jpg" width="23" height="23" border="0" name="Image1" ></a>
2.2 输入完密码后回车代替提交
<input type="password" id="password" name="password" size="10" maxlength="20" onKeyPress="keyDown()">
这里,keyDown()的内容是:
function keyDown()
{
{var Key=event.keyCode; var nKey=0}
if (Key==13)
{
fnLogin();
}
}2.3 fnLogin()
fnLogin往往是用JS作Form Check之后的,设置Action(这个必须,因为上面是用图片链接作按钮的),然后提交的过程,如:
function fnLogin()
{
if(fnValidate()==0) return;
document.logonForm.action="commonlogin.jsp";
document.logonForm.submit();
}而fnValidate()就是表单验证的函数了。
2.4 安全设置(错误转向以及Catch设置)
<%@page errorPage="error.jsp"%><% //Forward when exception %>
<%
response.setHeader("Cache-Control","no-store"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>2.5 其他小技巧:
i. DB violation:
if(str.indexOf("'")!=-1)
throw new Exception();ii. 设置光标位置:
<script language="JavaScript" type="text/javascript">
<!--
document.forms["logonForm"].elements["login"].focus();
-->iii. 返回上一页面
<A HREF="javascript:history.go(-1)" target="">Go Back</A>
3。服务器端验证以及设置标签
3.1 通常设置一个Bean存放用户信息(与DB对应),如UserProfile,包括id, name ,role_type, pass 等等
3.2 关于密码:通常在数据库里的密码是加密过的。因此密码的验证有两种方式:一种是将用户输入的密码加密后,得到的密文与数据库里的密文直接比较;还有一种是将数据库里的密文解密后与用户输入作比较。我认为前者应该好一些。。
3.3 对输入的密码错误的(登陆失败),可以采用抛出异常的方式处理。这种方式的优点是在函数调用时,异常是可传递的(可传递的意思是说函数A调用B,B调用C,C抛出的异常在A里也会被捕捉,不知道这样说对不对。。。)。比如在主程序里有:
user =(UserProfile)userManager.doLogin(name, password);
对于登陆失败,doLogin函数只要简单地:
throw new Exception();
在主程序里,可以这样:
try
{
//check if valid login and password using doLogin() function
}catch(Exception e)
{
System.out.println("catch called in commonlogin.jsp");
out.println(e.getMessage());
// to display error message or dispatch for invalid login }
这种方法代替了返回boolean值的方法,我记得在一本书上看到过,这样的方法对效率是有好处的。
3.4 关于登陆成功/失败的标签
在上面主程序的例子中,catch的程序内容可以这么写:
System.out.println("catch called in commonlogin.jsp");
out.println(e.getMessage());
// to display error message for invalid login
out.println("<HTML>");
out.println("<BODY>");
out.println("<FORM name='passback' method='post' action='login.jsp' >");
out.println("<input type='hidden' name='flag' value='true'>");
out.println("<script language=javascript> document.passback.submit();</script>");
out.println("</BODY>");
out.println("</HTML>");
这样写的特点是在设置标签(flag)时,用了表单形式,并且提交形式也比较特殊,很少见。好坏不知。
基于上面的说法,在登陆页面中如下类似的代码:
try{
if(request.getParameter("flag") !=null)
{
catchFlag = request.getParameter("flag");
if(catchFlag.equals("true"))
{
%>
<script>alert("Invalid login.Try again");</script>
<%
}
catchFlag = "false";
}
}
catch(Exception e)
{
System.out.println("the error is:" +e);
}
其中,由于设置了<@page errorPage =".."%>,一旦发生异常,页面将自动跳转
吃饭了,以后再写
最后
以上就是爱笑高跟鞋为你收集整理的Web登陆模块的常见解决方案及一些注意事项的全部内容,希望文章能够帮你解决Web登陆模块的常见解决方案及一些注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复