记录4

来源:互联网 发布:yum 安装vim 编辑:程序博客网 时间:2024/05/18 00:50
 

spring web 项目实战系列–搭建一个仿知乎的问答网站(四)(登陆注册功能实现)

标签: springwebjava
 29人阅读 评论(0) 收藏 举报
 分类:
  

目录(?)[+]

  • 传送门
  • 思路分析
  • 实现流程
    • 1 注册
      • 11 注册逻辑
      • 12 UserService 中的注册逻辑代码
      • 13 controller 路由响应接口
    • 2 登陆
      • 21 登陆流程
      • 22 UserService 中的登陆核心代码
      • 23 controller 路由响应
    • 3 登出
  • 实现效果

1. 传送门

spring web 项目实战系列–搭建一个仿知乎的问答网站(一)

spring web 项目实战系列–搭建一个仿知乎的问答网站(二)

spring web 项目实战系列–搭建一个仿知乎的问答网站(三)

spring web 项目实战系列–搭建一个仿知乎的问答网站(四)

spring web 项目实战系列–搭建一个仿知乎的问答网站(5) 拦截器页面访问控制 
项目工程地址: https://code.csdn.net/zhyh1435589631/my_zhihu/tree/master

本次主要实现的是登陆注册的功能

2. 思路分析

  1. 其实登陆注册登出, 本质上就是在操作 , 我们之前定义的 user, 和 ticket 表。

    • 注册就是向这个user 表中写入用户信息, 服务器为用户分配一个cookie 存放 ticket 键值, 并存放在 ticket 表中
    • 登陆就是根据用户传递过来的username 和 password 去查询user 表, 得到用户信息之后, 分配一个会话用的 ticket
    • ticket 用来标记用户
    • 登出, 本质上就是使得这个ticket对应的数据项无效
  2. 其实在python 的flask 框架中, 这部分其实可以使用 flask-login 模块来完成用户的认证, 使用 login、logout 实现登入, 登出操作。 另外密码加盐 也可以通过 Werkzeug 简单的实现。

3. 实现流程

3.1 注册

3.1.1 注册逻辑

  1. 首先我们在UserService 中写入 一个注册逻辑
开始账户名密码是否符合要求user 表中插入信息ticket 表插入信息, 并返回ticket结束yesno

3.1.2 UserService 中的注册逻辑代码

注册成功, 更新数据库表项, 返回 ticket字段 
注册失败, 返回msg 错误提示

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> register(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> username, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> password){        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> HashMap<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span>();        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> pattern <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^[A-Za-z0-9]{6,18}$"</span>;        boolean ret <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> regexMatch<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Match</span>(pattern, username) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> regexMatch<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Match</span>(pattern, password);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>ret){            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"用户名/密码 必须由长度为6-18 的字母,数字组成"</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;        }        User user <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> userDAO<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>selectByUserName(username);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (user <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>){            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"用户已存在"</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// add user</span>        user <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> User();        Random random <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> Random();        user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setUsername(username);        user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setSalt(UUID<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>randomUUID()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>toString()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>substring(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span>)<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>replaceAll(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>));        user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setPassword(MD5<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>MD5(password <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getSalt()));        user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setHeadUrl(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/yurisa/"</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> random<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>nextInt(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">".jpg"</span>);        userDAO<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addUser(user);        Ticket ticket <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> addTicket(user);        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>, ticket<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getTicket());        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>

3.1.3 controller 路由响应接口

既然是注册, 就一定需要有一个注册的路由响应, 这里我们将这个路由的注册响应定义为 /reg/, 用户将注册信息, 发送到这个路由上来, 即可实现注册的逻辑流程处理。

在注册成功之后, 服务器在向客户端传递的 HttpServletResponse 中, 写入cookie, 并加入响应的 用户信息 user 
这里写图片描述

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// reg</span>    @RequestMapping(path <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> {<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/reg/"</span>}, method <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> RequestMethod<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>POST)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> reg(Model model,                      @RequestParam(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> username,                      @RequestParam(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> password,                      HttpServletResponse response){        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> userService<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>register(username, password);        try{            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>containsKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>)){                Cookie cookie <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> Cookie(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>));                cookie<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setPath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>);                response<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addCookie(cookie);                model<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"user"</span>, userService<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>selectByTicket(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>)));                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"redirect:/"</span>;            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                model<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>));                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"login"</span>;            }        }        catch (Exception e){            logger<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>error(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"注册异常"</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> e<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getMessage());            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"login"</span>;        }    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul>

3.2 登陆

3.2.1 登陆流程

开始条件判断发放ticket结束yesno

3.2.2 UserService 中的登陆核心代码

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> login(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> username, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> password){        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> HashMap<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span>();        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> pattern <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^[A-Za-z0-9]{6,18}$"</span>;        boolean ret <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> regexMatch<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Match</span>(pattern, username) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> regexMatch<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Match</span>(pattern, password);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>ret){            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"用户名/密码 必须由长度为6-18 的字母,数字组成"</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;        }        User user <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> userDAO<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>selectByUserName(username);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (user <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>){            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"用户名不存在"</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>  <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;        }        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> password_com <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> MD5<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>MD5(password <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getSalt());        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>password_com<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">equals</span>(user<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getPassword())){            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"密码不正确"</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;        }        Ticket ticket <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> addTicket(user);        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>, ticket<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getTicket());        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span>;    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

3.2.3 controller 路由响应

类似reg 的路由响应, 不过这里调用的是 login 的底层逻辑进行实现

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// login</span>    @RequestMapping(path <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> {<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/login/"</span>}, method <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> RequestMethod<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>POST)    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> login(Model model,                        @RequestParam(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> username,                        @RequestParam(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> password,                        HttpServletResponse response){        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Map</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> userService<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>login(username, password);        try{            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>containsKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>)){                Cookie cookie <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> Cookie(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>));                cookie<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setPath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>);                response<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addCookie(cookie);                model<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"user"</span>, userService<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>selectByTicket(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ticket"</span>)));                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"redirect:/"</span>;            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                model<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"msg"</span>));                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"login"</span>;            }        } catch ( Exception e){            logger<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>error(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"登陆异常"</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> e<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getMessage());            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"login"</span>;        }    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li></ul>

3.3 登出

  1. 登出其实就非常简单了, 定义一个路由响应函数, 调用一个service服务, 将 数据库表ticket 的 status 字段变为 1 即可实现用户登出

4. 实现效果

这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 李阳阳 白爽 丝母 我的丝母欲韵盘多多 娇母 笔趣阁 校长妈陈淑娴外篇 丝母欲韵500 我的丝母欲韵13 经典家庭伦txt丝母韵欲电子书 经典家庭伦txt丝母韵欲彩图 经典家庭伦txt丝母韵欲txt下载 经典家庭伦txt丝母韵欲d下载 经典家庭伦txt丝母韵欲视频 长篇都市情感小说 经典家庭伦全文 久九九久精品免费视频 91在线中文字幕香蕉人人视频 经典家庭伦txt岳丝母小丹韵欲阅读 碰超上线视频人人视频千人 91青青碰起上线视频人人 车里太挤姑妈坐我腿上做小说 经典家庭伦txt岳丝母小丹韵欲小说 我的丝母欲韵第六节 91在线中文久人人视频动漫 悉母全集动漫完整视频 类别中文动漫中的视频 腐母动漫全集视频时长 86 母汁视频动漫 久99久视频精品免费观看38 难以忍耐动漫视频中文 久九九久手机视频 乳娘家教动漫无删减在线播放 久99久精品视频只有精品 母恋人2017中文 久九九久视频精品6思思 巨母3动漫在线 久99久视频精品免费视频动漫 水柔姐大战儿子视频91 久九九久视频精品 99视频国内99视频在线观 横恋人母日语中字 玖玖视频热线视频大全 九九视频热线视频大全动漫