基于layui框架的登录验证

基于layui框架的登录验证

开发工具:idea,tomcat,ssm框架,以及引入的layui
一些关于框架的搭建在此略过,以后可能会发布一些相关文章layui现成的登录页面
这里只改变了背景图片,是一个现成的页面

//form表单部分代码
<form class="layui-form">
    <div class="login_face"><img src="/sources/lay/images/face.jpg" class="userAvatar"></div>
    <div class="layui-form-item input-item">
        <label for="userName">用户名</label>
        <input type="text" placeholder="请输入用户名" autocomplete="off" id="userName" name="username" class="layui-input" lay-verify="required">
    </div>
    <div class="layui-form-item input-item">
        <label for="password">密码</label>
        <input type="password" placeholder="请输入密码" autocomplete="off" id="password" name="password" class="layui-input" lay-verify="required">
    </div>
    <div class="layui-form-item input-item" id="imgCode">
        <label for="code">验证码</label>
        <input type="text" placeholder="请输入验证码" autocomplete="off" id="code" name="code" class="layui-input" lay-verify="required">
        <img src="/user/getcode" onclick="this.src=this.src+'?'" id="codehz">
    </div>
    <div class="layui-form-item">
        <button class="layui-btn layui-block" lay-filter="login" lay-submit>登录</button>
    </div>
</form>

   前端页面主要对三个框的name属性做了规范,以便controller入参自动封装,分别是username,password,和code
   首先编写了一个工具类ResultObject,用来封装校验后的结果信息,属性code大小表示查询状态,msg则是弹出信息提示,-1,0,1三种状态分别表示验证码错误,无此用户,用户查询成功

   这里编写controller,业务都在service里面处理

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
        /*登录验证*/
    @RequestMapping("/login")
    @ResponseBody
    public ResultObject login(UserVo user, HttpServletRequest request, HttpServletResponse response){
        ResultObject resultObject=userService.login(user, request, response);
        return resultObject;
    }
 /*获取验证码*/
    @RequestMapping("/getcode")
    public void getCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
        userService.getCode(request,response );

    }

}

service代码

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    

    @Override
    public ResultObject login(UserVo user, HttpServletRequest request, HttpServletResponse response) {
       String code=user.getCode();//拿到验证码
        String session_code=request.getSession().getAttribute("code").toString();//拿到存储在服务器的校验验证码
        String msg="";
        Integer status_code=0;
        if(code.equals(session_code)){//验证码正确
            List<User> login = userDao.login(user);
            if(login.size()>0){
                msg="登陆成功";
                status_code=1;
            }else{
                msg="登陆失败";
                status_code=0;
            }
           
        }else {
            msg="验证码错误";
            status_code=-1;
        }
        /*将旧验证码失效*/
        request.getSession().setAttribute("code", "");

        ResultObject resultObject = new ResultObject(status_code,msg);
        return resultObject;
    }

    @Override
    public void getCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
            /*生成验证码*/
        ICaptcha captcha= CaptchaUtil.createLineCaptcha(116, 36);
        /*把码值存放在session*/
        request.getSession().setAttribute("code",captcha.getCode() );
        /*图片回写到前端*/
        captcha.write(response.getOutputStream());
    }
}

   其中包括两个方法,分别对应controller中对service的调用,login方法拿到前台的用户数据,先与session中存放的验证码进行比较,一致后再进行数据库查询操作,最后返回一个ResultObject对象,包含用户登录状态,同时将session里存放的当前验证码设置失效(否则此验证码将长期有效,容易遭到破解),getcode方法则是直接参考链接的插件htool在这里插入图片描述
直接通过输出流将验证码图片返回前台

login前台对应的js文件

 //登录按钮
    form.on("submit(login)",function(data){
        var _this=$(this);
        $(this).text("登录中...").attr("disabled","disabled").addClass("layui-disabled");
       $.ajax({
           url:'/user/login',
           type:"get",
           data:data.field,
           success:function(data){
               /*验证码通过*/
               if(data.code!=-1){
                   /*查找到用户信息*/
                   if(data.code>0){
                       layer.msg(data.msg,function () {
                           window.location.href = "/index.jsp";
                       })
                   }else{//未查找到信息
                       layer.msg(data.msg);
                       $("#codehz").click();//刷新验证码
                       /*将按钮恢复为可登录状态*/
                       _this.text("登录").attr("disabled",false).removeClass("layui-disabled");
                   }
               }else{//验证码输入错误则重新生成
                   layer.msg(data.msg);
                   _this.text("登录").attr("disabled",false).removeClass("layui-disabled");
                   $("#codehz").click();//刷新验证码
               }
           }
       })
        return false;
    })

   值得一提的是,需要在用户登录失败后将登录按钮重置为可登录状态,同时需要在登录失败后再次发起getcode请求获取新的验证码(方法:在图片src属性增加’?'以保证请求更新,其实就是带假参数,这里采用点击事件是则利用了前台jsp里设置的点击时间更新请求的写法)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值