登錄驗證碼


一:用到了hutool工具類中的驗證碼生成類,黃色標注為重點

1.引用maven

        <!--hutool工具類-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.1</version>
        </dependency>

2.前端html頁面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>后台管理-登陸</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Access-Control-Allow-Origin" content="*">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <link rel="stylesheet" th:href="@{/lib/layui-v2.6.3/css/layui.css}"  media="all">
    <script th:src="@{/lib/jquery-3.4.1/jquery-3.4.1.min.js}" charset="utf-8"></script>
    <script th:src="@{/lib/layui-v2.6.3/layui.js}"  charset="utf-8"></script>
    <script th:src="@{/lib/jq-module/jquery.particleground.min.js}" charset="utf-8"></script>
    <!--[if lt IE 9]>
    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>

    <![endif]-->
    <style>
        html, body {width: 100%;height: 100%;overflow: hidden}
        body {background: #1E9FFF;}
        body:after {content:'';background-repeat:no-repeat;background-size:cover;-webkit-filter:blur(3px);-moz-filter:blur(3px);-o-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px);position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;}
        .layui-container {width: 100%;height: 100%;overflow: hidden}
        .admin-login-background {width:360px;height:300px;position:absolute;left:50%;top:40%;margin-left:-180px;margin-top:-100px;}
        .logo-title {text-align:center;letter-spacing:2px;padding:14px 0;}
        .logo-title h1 {color:#1E9FFF;font-size:25px;font-weight:bold;}
        .login-form {background-color:#fff;border:1px solid #fff;border-radius:3px;padding:14px 20px;box-shadow:0 0 8px #eeeeee;}
        .login-form .layui-form-item {position:relative;}
        .login-form .layui-form-item label {position:absolute;left:1px;top:1px;width:38px;line-height:36px;text-align:center;color:#d2d2d2;}
        .login-form .layui-form-item input {padding-left:36px;}
        .captcha {width:60%;display:inline-block;}
        .captcha-img {display:inline-block;width:34%;float:right;}
        .captcha-img img {height:34px;border:1px solid #e6e6e6;height:36px;width:100%;}
    </style>
</head>
<body>
<div class="layui-container">
    <div class="admin-login-background">
        <div class="layui-form login-form">
            <form class="layui-form" action="javaScript:;" >
                <!--<form class="layui-form" action="javaScript:;" onsubmit="return checkForm()">-->
                <div class="layui-form-item logo-title">
                    <h1>我佛慈悲后台登錄</h1>
                </div>
                <div class="layui-form-item">
                    <label class="layui-icon layui-icon-username" for="username"></label>
                    <input type="text" id="username" name="username" lay-verify="required|account" placeholder="賬號" autocomplete="off" class="layui-input" value="">
                </div>
                <div class="layui-form-item">
                    <label class="layui-icon layui-icon-password" for="password"></label>
                    <input type="password" id="password" name="password" lay-verify="required|password" placeholder="密碼" autocomplete="off" class="layui-input" value="">
                </div>
                <div class="layui-form-item">
                    <label class="layui-icon layui-icon-vercode" ></label>
                    <!--<input type="text" name="captcha" lay-verify="required|captcha" placeholder="圖形驗證碼" autocomplete="off" class="layui-input verification captcha" value="xszg">-->
                    <input type="text" id="imgText" name="imgText"   placeholder="圖形驗證碼" autocomplete="off" class="layui-input verification captcha" >
                    <div class="captcha-img">
                        <!--<img id="captchaPic" th:src="@{/images/captcha.jpg}" >-->
                        <img id="codeImg" th:src="@{/getCode}" onclick="refresh()" alt="" >
                    </div>
                </div>
                <div class="layui-form-item">
                        <font id="error" name="error" color="red"></font>

                </div>

                <div class="layui-form-item">
                    <input type="checkbox" name="rememberMe" value="true" lay-skin="primary" title="記住密碼">
                </div>
                <div class="layui-form-item">
                    <button class="layui-btn layui-btn layui-btn-normal layui-btn-fluid" lay-submit="" lay-filter="login">登 入</button>
                </div>
            </form>
        </div>
    </div>
</div>
<script> function refresh() { console.log(1) // $('#codeImg').src="getCode?time="+new Date().getTime();
        document.getElementById("codeImg").src="getCode?time="+new Date().getTime(); } </script>
<script>
    layui.use(['form'], function () {
        var form = layui.form,
            layer = layui.layer
            // $ = layui.$;

        // 登錄過期的時候,跳出ifram框架
        if (top.location != self.location) top.location = self.location;

        // 粒子線條背景
        $(document).ready(function(){
            $('.layui-container').particleground({
                dotColor:'#7ec7fd',
                lineColor:'#7ec7fd'
            });
        });

        // 進行登錄操作
        form.on('submit(login)', function (data) {
            data = data.field;
            if (data.username == '') {
                layer.msg('用戶名不能為空');
                return false;
            }
            if (data.password == '') {
                layer.msg('密碼不能為空');
                return false;
            }
            if (data.imgText == '') {
                layer.msg('驗證碼不能為空');
                return false;
            }

            $.ajax({
                // url: "http://localhost:8081/login",
                url: "/login",
                data: {
                    username: data.username,
                    password: data.password,
                    imgText: data.imgText
                },
                dataType: "json",
                type: "post",
                success: function(data) {
                    if (data.code == "1000") {
                         console.log(data.msg)
                        window.location.href="/toIndex";
                    } else {
                         alert(data.msg);
                        // data.error.innerText = data.msg

                        $("#error").text(data.msg);
                    }
                }
            });
        });
    });

</script>
</body>
</html>

3.后端java代碼

package com.jack.all.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import com.jack.all.common.AjaxReturn;
import com.jack.all.entity.TUser;
import com.jack.all.service.TUserService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {

    @Autowired
    private TUserService userService;

    private LineCaptcha lineCaptcha;//獲取驗證碼用到的code

    /**
     *進入到登錄界面
     * @return
     */
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "login-1";
    }

    /**
     * 登錄驗證
     * @param request
     * @param session
     * @return
     */
    @RequestMapping("/login")
    @ResponseBody
    public AjaxReturn login(HttpServletRequest request, HttpSession session){
        String number=request.getParameter("username");
        String password=request.getParameter("password");
        String imgText=request.getParameter("imgText");
        System.out.println("======"+imgText);
        TUser check = userService.check(number, password);
        if (ObjectUtils.isEmpty(check)){
            return new AjaxReturn("1001","賬號不存在");
        }else {
            if (!check.getNumber().equals(number)){
               return new AjaxReturn("1001","賬號錯誤");
            }else {
                if (!check.getPassword().equals(password)){
                    return new AjaxReturn("1001","密碼錯誤");
                }else if (!imgText.equals(lineCaptcha.getCode())){ return new AjaxReturn("1001","驗證碼錯誤"); }
            }
        }
        session.setAttribute("login_user",check);
        return new AjaxReturn("1000","賬號和密碼正確",check);
    }

    /**
     * 生成驗證碼
     * @param response
     */
    @RequestMapping("/getCode")
    public void getCode(HttpServletResponse response){
        //隨機生成4為驗證碼
        RandomGenerator randomGenerator=new RandomGenerator("0123456789",4);
        //定義圖片的顯示大小
         lineCaptcha=CaptchaUtil.createLineCaptcha(100,30);
        response.setContentType("image/jpeg");
        response.setHeader("Pragma","No-cache");
        try {
            //調用父類的setGenerator()方法,設置驗證碼的類型
            lineCaptcha.setGenerator(randomGenerator);
            //輸出到頁面
            lineCaptcha.write(response.getOutputStream());
            System.out.println(lineCaptcha.getCode());
            //關閉流
            response.getOutputStream().close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM