(crm笔记2-5)用户登录问题之验证账户

原创 2017年10月06日 16:13:54

用户登录问题之验证账户

      

1、需求

      先看一下我们的登录页面

这里写图片描述


      我们需要做的是,将用户名、密码、验证码 传入到后台,在后台进行账户验证是否是数据库中的合法用户。如果是,进入menu.jsp页面,否者,重新回到登录页面。并提示用户名,密码,验证码等出错信息。


2、实现思路

      1)区分验证信息的前后关系,首先验证的是 验证码,其实是用户名密码

      2)在login.jsp中将获取到的验证码,用户名,密码等通过request传到Action.java处理方法中

      3)对于验证码:写一个专门的验证方法进行验证是否正确。

      4)对于用户名和密码:通过调用业务层的代码,在dao层对数据进行查询,查询是否存在用户名和密码。

      5)对于不同的验证,在前端jsp页面不同区域放置:错误信息显示



3:实现过程

      3.1 看前端的代码:

 <TABLE cellpadding="0" cellspacing="0">
 <TR>
    <TD class="td">用户帐号:</TD><TD class="td">
    <input name="name" type="text" value="" id="name"/></TD>
 </TR>
 <TR>
    <TD class="td">登录密码:</TD>
    <TD class="td"><input name="password" type="password" value="" id="password"></TD>
 </TR>
 <TR>
    <TD class="td">验&nbsp;证&nbsp;码:</TD>
    <TD class="td"><input name="checkNum" type="text" value="" id="checkNum" style="width: 80">
    <img id="checkNumImage" src="${pageContext.request.contextPath}/image.jsp" height="19" align="absmiddle" onClick="changeCheckNum()" 
 title="点击换一张" style="cursor:hand"><s:fielderror fieldName="checkNum"/></TD>
 </TR>
 <TR>
    <TD class="td">记&nbsp;住&nbsp;我:</TD>
    <TD class="td"><input name="rememberMe" type="checkbox" id="rememberMe"  value="yes" class="checkbox" ></TD>
 </TR>
 </TABLE>

      设置信息框的name属性,因为jsp和java直接的通信是可以通过request.getParameter(“属性名”)这个方法传值的,而方法里面的值就是name=”“属性名

然后确定页面之间的跳转和Action的调用,在“登录”按钮提交的事件需要进行配置:

<form name="form0" method="post" action="${pageContext.request.contextPath}/sysUserAction_isLogin.do">



      将整个表单交给Action处理,然后开始写这个处理的方法,有点复杂:

    public String isLogin(){
            ......
            return "main";//首先确定是返回的是main.jsp当然这是登录成功的跳转,否者跳转到Login.jsp
    }



      3.2 实现验证码的验证,写一个工具类,里面实现验证的方法:

      通过获取真实值和登录页面用户输入的验证码进行对比,判断验证码对错(对于验证码的生成方法只需要会使用即可)

public static  boolean isCheckNum(HttpServletRequest request) {
    //获取已经存在的session
    HttpSession session=request.getSession(false);
    if(session==null){
        return false;
    }
    String check_number_key=(String) session.getAttribute("CHECK_NUMBER_KEY");//这里获取的是验证码中的数字,这个属性是在专用的验证码处理类中定义好的,将一个随机的数字CHECK_NUMBER_KEY传入就会生成对应的验证码图片,而这个属性便是其真实值

    if(StringUtils.isBlank(check_number_key)){
        return false;
    }
    //获取文本框中输入的值
    String saved=request.getParameter("checkNum");
    if(StringUtils.isBlank(saved)){
        return false;
    }

    //比对页面中的值和session的值
    return check_number_key.equalsIgnoreCase(saved);
}



      3.3 验证用户名和密码

public String isLogin(){

        ......

//处理用户名和密码是否输入正确
String name=request.getParameter("name");
String password=request.getParameter("password");

SysUser sysUser= sysUserService.findSysUserByNameAndPassword(name,password);
//验证信息
if(sysUser==null){
    return "login";
    }
        return "main";
}



1)业务层

    /**
     * 通过用户名和密码查询用户
     * @param name
     * @param password
     * @return
     */
    @Override
    public SysUser findSysUserByNameAndPassword(String name, String password) {
        if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(password)){
            String whereHql=" and o.name=? and o.password= ?";
            Object []params={name,password};
            List<SysUser>list= sysUserDao.findObjectByConditionWithNoPage(whereHql, params);
            if(list!=null&&list.size()==1){
                return list.get(0);
            }
        }
        return null;
    }

      组织查询语句,将用户名和密码传入查询语句中。调用dao进行数据库查询。


2)dao层

@Override
    public List<T> findObjectByConditionWithNoPage(String whereHql,final Object[] params ,LinkedHashMap<String, String>orderby) {
        //获取hql语句select前半部分
        String hql="select o from "+entityClass.getSimpleName()+" o where 1=1 ";

        if(StringUtils.isNotBlank(hql)){
            hql+=whereHql;//加入接收到的where部分
        }

        final String fhql=hql;

        //调用hibernate中的方法执行query语句
        @SuppressWarnings("unchecked")
        List list=(List<T>)this.getHibernateTemplate().execute(new HibernateCallback(){
            @Override
            public Object doInHibernate(Session session)throws HibernateException, SQLException {
                Query query=session.createQuery(fhql);
                if(params!=null&&params.length>0){
                    for(int i=0;i<params.length;i++)
                        query.setParameter(i, params[i]);
                }
                return query.list();
            }
        });
        return list;
    }



4、错误信息Jsp页面显示

这里写图片描述


1)前端页面

      这时候要对前端的页面添加一些信息显示区域:

<TD class="td">验&nbsp;证&nbsp;码:</TD>
<TD class="td"><input name="checkNum" type="text" value="" id="checkNum" style="width: 80">
<img id="checkNumImage" src="${pageContext.request.contextPath}/image.jsp" height="19" align="absmiddle" onClick="changeCheckNum()" 
           title="点击换一张" style="cursor:hand"><s:fielderror fieldName="checkNum"/></TD>



      在后面加一段:

<s:fielderror fieldName="checkNum"/>

      这段区域用来显示错误信息。



      同理在用户名和密码的输入框后面也加入类似的框:

<s:fielderror  fieldName="name"/>//记得改filedName



      当然在使用这个区域首先需要引入struts2的标签库:

<%@ taglib uri="/struts-tags" prefix="s"%>//在页面最顶端添加



2)后台信息传递

      在Action处理时就需要将错误信息显示出来了,当验证码错误或者密码等:
验证码:

        //处理验证码,判断验证码是否输入正确
        boolean flag=SessionUtils.isCheckNum(request);
        if(!flag){
            this.addFieldError("checkNum","验证码输入错误,请重新输入!");//这里的.addFieldError("checkNum")方法就会在前面设置好的区域显示信息
            return "login";
        }

      同理在用户名和密码错误时:

        //验证信息,当查询数据库失败,没有找到这个用户,用户为空时:
        if(sysUser==null){
            this.addFieldError("name", "用户名或密码错误!");
            return "login";//返回登录页面
        }



      至此就所有登录信息验证部分就成功了。

版权声明:本文为博主原创文章,转载请注明出处

shiro 用户权限管理(2)-----注册md5加密,登录验证

register.jsp注册页面: 姓 名: 密 码:

简单Blog项目笔记之三:用户登录模块(验证码、MD5)

一:登录jsp 表单里先从session里找用户名(登录后会写入session) 没找到的话显示登录,或注册 找到的话显示用户名和退出,还有用户域名的博客空间 ...

【2】CRM_用户模块_注册功能

友情提示:该CRM案例源代码及SQL文件在下面链接中(该案例只实现了三个模块,仅仅是对SSH相关知识点练习使用) http://download.csdn.net/detail/lwt97664763...

Win7远程连接问题:凭据不工作 & 没有授权此用户账户

1、问题描述 win7系统远程桌面到某个电脑的一个账户名为 admin 的用户,但提示“您的凭据不工作,之前连到 *.*.*.*的凭据无法使用,请输入新凭据”,即使输入正确的密码也提示“登陆没有成功”...
  • minenki
  • minenki
  • 2013年07月13日 11:50
  • 49306

Windows Server 2008 R2 导入大批量的用户账户

如何导入大批量的用户账户?是我们在2008R2安装搭建好之后需要考虑的一件事情。 方法就是把用户信息在Excel文档里面整理好,然后再用命令或者脚本导入到AD里面。 当然,方法是越简单越好,需要我...

Windows Server 2008 R2 AD导入大批量的用户账户

如何导入大批量的用户账户?是我们在2008R2安装搭建好之后需要考虑的一件事情。 方法就是把用户信息在Excel文档里面整理好,然后再用命令或者脚本导入到AD里面。 当然,方法是越简单越好,需要我们修...

Linux运维笔记----LDAP 网络用户账户

LDAP 网络用户账户1.LDAP•LDAP 目录服务器可以用作分布式、集中式、网络用户管理服务。目录条目按树结构排列 , 可以在其中进行搜索。基础 DN ( 区分名称 ) 是树的基础 , 用于搜索用...
  • men_wen
  • men_wen
  • 2016年09月10日 20:31
  • 1108

Linux学习笔记23 --LDAP网络用户账户

Ⅱ 8.LDAP网络用户账户 #一.LDAP是什么# ldap目录服务认证,和windows活动目录类似,就是记录数据的一种方式 #二.LDAP客户端所须...
  • HnSoi
  • HnSoi
  • 2017年05月03日 11:58
  • 141

Socks5代理协议工程,支持账户验证

  • 2014年07月26日 22:39
  • 2.02MB
  • 下载

【3】CRM_用户模块_登录功能

友情提示:该CRM案例源代码及SQL文件在下面链接中(该案例只实现了三个模块,仅仅是对SSH相关知识点练习使用) http://download.csdn.net/detail/lwt9766476...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(crm笔记2-5)用户登录问题之验证账户
举报原因:
原因补充:

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