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

来源:互联网 发布:apache服务器安装 编辑:程序博客网 时间:2024/05/18 01:05

本文上一篇的内容的基础上,加入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过滤器。

阅读全文
0 0