基于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
    评论
layui是一款基于jQuery的模块化前端UI框架,它提供了丰富的组件和简洁易用的API,使得前端开发更加高效和便捷。下面是基于layui框架的快速入门指南。 首先,我们需要下载layui框架的压缩包并解压到项目目录中,然后在HTML文件中引入相关的CSS和JS文件。 接着,我们可以使用layui定义页面的整体布局。可以使用布局组件如lay-header、lay-sider、lay-footer等进行页面分割。在页面中,使用类似以下方式来定义布局: <div class="layui-layout layui-layout-admin"> <div class="layui-header">头部内容</div> <div class="layui-side">侧边栏内容</div> <div class="layui-body">主体内容</div> <div class="layui-footer">底部内容</div> </div> 然后,我们可以使用layui的组件来实现页面的各种功能。比如使用表格组件来展示数据,使用表单组件来进行表单验证和提交,使用弹出层组件来实现弹出框效果等等。组件的使用一般需要引入相应的模块,如 layui.use(['table', 'form'], function(){ var table = layui.table; var form = layui.form; // 其他代码 }); 最后,我们可以使用layui的一些辅助功能来完善页面。比如使用element模块来实现选项卡、面包屑等导航功能,使用laydate模块来实现日期选择功能,使用laytpl模块来实现模板渲染等等。 通过以上步骤,我们就可以快速入门layui框架,并开始进行前端开发。需要注意的是,layui框架有丰富的文档和示例,可以通过查阅文档来进一步熟悉和掌握layui框架的各种功能和用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值