Web登陆模块的常见解决方案及一些注意事项

原创 2006年06月05日 11:22:00

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 =".."%>,一旦发生异常,页面将自动跳转

 

 吃饭了,以后再写

相关文章推荐

沙盒解决方案注意事项

sharepoint 沙盒解决方案

cmd合并打包、存在的坑、解决方案及注意事项

我想要的打包目标是:将模块合并,同时实现只需要简单修改的配置就能在发布版和调试版之间切换。...

微信公众号开发问题与注意事项和解决方案

接入问题1.消息接入后,每次请求的session都不同。不要想着用一个用户用session来保存数据用户管理获取用户地理位置场景使用举例:获取附近有哪些网点。 关键点是:获取到 用户的地理位置信息:...

微信支付开发中遇到的问题以及注意事项和解决方案

统一下单支付: prepay_id 两小时过期 统一下单支付的订单可以用同一个订单号下单,相当于重新支付该订单,但是偶尔会出现 该笔订单没有付款,却又提示商户号重复。 解决未支付,商户号重复的办法,先...

关于微信sdk的注意事项与解决方案

不得不说,为了实现一个微信简单的分享功能
  • nijiayy
  • nijiayy
  • 2014年10月21日 11:35
  • 5796

转载:vista开发注意事项及解决方案

转自: http://blog.csdn.net/zdl1016/article/details/4198988 1.判断UAC是否启动 BOOL _stdcall IsRunUAC()/...

iOS 带IAP提交注意事项及无法submit for review的解决方案

最近项目接触到了苹果的程序内购(IAP),碰到不少问题,参考了很多帖子才得以解决。在此总结一下,多少可以为初次接触IAP的童鞋一些帮助,面对苹果严格的审核少费一点脑筋。闲话不多说,刚接触时的纠结我懂得...
  • ypfsoul
  • ypfsoul
  • 2013年09月09日 22:32
  • 2337

VS2008无法支持X64平台的解决办法 & VS解决方案管理注意事项

用VS2008创建的项目 当尝试创建X64的编译平台时 发现平台下拉框中 没有X64的选项 原因是安装VS2008时 没有选中X64的支持(这个选项默认是没有选中的) 如图所示:...

php登陆 注意事项

  • 2012年05月15日 11:10
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Web登陆模块的常见解决方案及一些注意事项
举报原因:
原因补充:

(最多只允许输入30个字)