SpringBoot + thymeleaf 实现简单的登陆验证

本文上一篇的内容的基础上,加入thymeleaf 模板,实现一个简单的登陆和页面错误提示的功能,借此了解SpringBoot web项目,同时为大家分享一些编码小技巧,用于简化代码。

我们回到第一篇的内容,看一下项目的目录结构,SpringBoot 生成项目时,如果引入了web组件,在resources文件夹下面会生成两个文件夹static 和 templates 。static文件夹默认存放css、js等静态资源,templates文件夹用来存放html等模板页面(有兴趣的同学可以通过配置文件或配置类修改存放路径,在demo中,我们就 使用Spring推荐的默认路径 )。

一、在templates 下,编写一个登陆页面 login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>登录</title>
    <link rel="stylesheet" type="text/css" href="/css/common.css" />
</head>
<body>
    <form th:action="@{/login}" method="post">
        <div>
            <!--/*@thymesVar id="error" type=""*/-->
            <span id="basic-addon0">&nbsp;</span>
            <span style="font-size: 12px;color: red" th:text="${error}" aria-describedby="basic-addon0"></span>
        <br />
        </div>
        <div>
            <span id="basic-addon1">@</span>
            <input id="user_name" name="userName" type="text" placeholder="用户名" aria-describedby="basic-addon1" />

        </div>
        <br />
        <div>
            <span id="basic-addon2">@</span>
            <input id="password" name="password" type="password" placeholder="密码" aria-describedby="basic-addon2" />
        </div>
        <br />
        <button type="submit" style="width:190px;">登 录</button>

    </form>
</body>
</html>

我们只要在标签中加入 xmlns:th=”http://www.thymeleaf.org” , 启用thymeleaf模板。
关于thymeleaf 的语法我们后面另起篇幅进行分享。

二、编写LoginController控制器

package cn.pw.pf.web.controller;

import cn.pw.pf.web.requestParam.UserVo;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.validation.Valid;

/**
 * 页面登陆控制器
 * @Description:
 * @Author:libin
 * @Date: Created in 15:28 2017/11/13
 */
@RestController
@RequestMapping("/")
public class LoginController {

    @GetMapping("/login")
    public ModelAndView login(ModelAndView modelAndView){
        modelAndView.setViewName("login");
        return modelAndView;
    }

    @PostMapping("/login")
    public ModelAndView login(ModelAndView modelAndView, @Valid UserVo userVo, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            modelAndView.addObject("error",bindingResult.getFieldError().getDefaultMessage());
            modelAndView.setViewName("login");
            return modelAndView;
        }
        String userName = userVo.getUserName();
        String password = userVo.getPassword();

        if(!"admin".equals(userName)){
            modelAndView.addObject("error","无此用户!");
            modelAndView.setViewName("login");
            return modelAndView;
        }
        if(!"123456".equals(password)){
            modelAndView.addObject("error","密码错误!");
            modelAndView.setViewName("login");
            return modelAndView;
        }
        modelAndView.addObject("userName",userName);
        modelAndView.setViewName("index");
        return modelAndView;
    }
}

login 的get请求用于页面跳转,post请求用于处理登陆验证。
这里我使用了@Valid 和 BindingResult 实现页面参数验证。

三、编写 UserVo类,用于bind页面请求参数。同样,我们创建一个新包,requestParam,存放UserVo。

package cn.pw.pf.web.requestParam;

import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.Size;

/**
 * 页面请求参数对应实体
 * @Description:
 * @Author:libin
 * @Date: Created in 15:34 2017/11/13
 */
public class UserVo {
    private Long id;

    @NotEmpty(message="用户名不能为空!")
    private String userName;

    private String nickName;

    @Size(min=6,max=10,message = "密码长度必须6到10位")
    private String password;

    private Integer age;

    private Integer sex;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }


    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

OK,代码编写完毕,我们测试一下。
1、启动项目,打开 http://localhost:8680/login

这里写图片描述

2、在不输入用户名密码的情况下,点击登录

这里写图片描述

3、输入用户名 admin 不输入密码,点击登录

这里写图片描述

4、输入完整的用户名密码,用户名:adimn 密码:123456

这里写图片描述

总结:截止目前,很简单的一个 SpringBoot web项目 ,内容很简单,代码极少,全程没有一个xml。下一篇我们分享SpringBoot web 配置Filter过滤器。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值