Web登陆模块的常见解决方案及一些注意事项
2006-06-05 11:22
447 查看
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 =".."%>,一旦发生异常,页面将自动跳转
吃饭了,以后再写
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 =".."%>,一旦发生异常,页面将自动跳转
吃饭了,以后再写
相关文章推荐
- Clojure Web 开发一些注意事项
- 关于TC35模块的一些注意事项。
- MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
- ava 调用 .net Webservice的一些问题和注意事项
- watir代码移植至watir-webdriver代码时需要注意的一些事项
- 关于web前端一些常见bug及解决方案
- Java 调用 .net Webservice的一些问题和注意事项
- (转载)Android一些不常见的API及一些其他注意事项
- 关于web前端的一些注意事项
- 关于java web中session的一些注意事项与总结
- 开发web系统的一些注意事项(随时更新)
- HttpWebRequest类库注意事项以及常见问题
- Android问题—Android 4.4后WebView的一些注意事项
- 将一个完整的java web 项目中的部分模块做成Webservice服务注意事项
- std::map的一些常见用法和个别注意事项
- 【JavaWeb-19】Struts2总结案例中的一些实战知识小点和注意事项
- 手机web页面制作一些注意事项
- 在eclipse上用Maven创建WEB项目一些注意事项
- Android基础入门教程——7.5.3 Android 4.4后WebView的一些注意事项
- Android 4.4后WebView的一些注意事项