记录4
来源:互联网 发布:yum 安装vim 编辑:程序博客网 时间:2024/05/18 00:50
spring web 项目实战系列–搭建一个仿知乎的问答网站(四)(登陆注册功能实现)
标签: springwebjava
2016-07-23 14:53 29人阅读 评论(0) 收藏 举报
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
- 传送门
- 思路分析
- 实现流程
- 1 注册
- 11 注册逻辑
- 12 UserService 中的注册逻辑代码
- 13 controller 路由响应接口
- 2 登陆
- 21 登陆流程
- 22 UserService 中的登陆核心代码
- 23 controller 路由响应
- 3 登出
- 1 注册
- 实现效果
1. 传送门
spring web 项目实战系列–搭建一个仿知乎的问答网站(一)
spring web 项目实战系列–搭建一个仿知乎的问答网站(二)
spring web 项目实战系列–搭建一个仿知乎的问答网站(三)
spring web 项目实战系列–搭建一个仿知乎的问答网站(四)
spring web 项目实战系列–搭建一个仿知乎的问答网站(5) 拦截器页面访问控制
项目工程地址: https://code.csdn.net/zhyh1435589631/my_zhihu/tree/master
本次主要实现的是登陆注册的功能
2. 思路分析
其实登陆注册登出, 本质上就是在操作 , 我们之前定义的 user, 和 ticket 表。
- 注册就是向这个user 表中写入用户信息, 服务器为用户分配一个cookie 存放 ticket 键值, 并存放在 ticket 表中
- 登陆就是根据用户传递过来的username 和 password 去查询user 表, 得到用户信息之后, 分配一个会话用的 ticket
- ticket 用来标记用户
- 登出, 本质上就是使得这个ticket对应的数据项无效
其实在python 的flask 框架中, 这部分其实可以使用 flask-login 模块来完成用户的认证, 使用 login、logout 实现登入, 登出操作。 另外密码加盐 也可以通过 Werkzeug 简单的实现。
3. 实现流程
3.1 注册
3.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 登出
- 登出其实就非常简单了, 定义一个路由响应函数, 调用一个service服务, 将 数据库表ticket 的 status 字段变为 1 即可实现用户登出
4. 实现效果
0 0
- 记录4
- [学习记录]KEPWare学习记录4
- Log 4j记录
- 综合记录4
- ibatis学习记录(4)
- MOSS应用记录--4
- 记录点滴4
- 2012-4-5 记录
- shell学习记录---4
- 项目记录-4
- 2014.3.4记录
- OpenGL学习记录4
- java 学习记录4
- 面试题目记录4
- 【每日记录】2014.5.4
- 【记录吧】2014.10.4
- Hibernate 学习记录 4
- 例4:记录类型
- Java String 首字母大小写问题
- 记录3
- ImageLoader的简单使用
- OPENCV入门教程九:图像旋转任意角度
- Android studio 常用快捷键
- 记录4
- uva 11270 1*2骨牌拼矩形的方案数。【轮廓线DP】
- 推荐系统itembase算法scala实现
- 多目录下,单makefile文档编程
- hduLucky7(容斥+中国剩余定理)
- springmvc SSM java redis shiro ehcache 整合
- C++头文件里编写实现代码
- UVA 816 bfs
- 自动化测试