栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java登录 完整示例 详解(cookie、session、拦截器的使用等)【一看就懂】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java登录 完整示例 详解(cookie、session、拦截器的使用等)【一看就懂】

本示例知识点包括:

       使用cookie记住用户名及密码、记录用户上次登录时间、登录次数、本次登录用户的信息并回显等、登录时的正则判断、拦截器的使用、双form标签的简单示例..

 

先来看后台控制层登录方法的代码逻辑(如图所示):

对应代码如下:

 @RequestMapping("/doLogin")
 //  这里使用了双form表单后端验证,没有或不会使用的小伙伴BindingResult之前的参数都可删除
 public String doLogin(@Validated @ModelAttribute("user") User user, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) {
     String name = user.getName();   //   获取前台传来对象中的name(用户名)的值
     userService.upCount(name);      //   根据用户名记录登录次数,无论密码正确与否都会记录
     //  双form表单验证功能:和实体对应,若实体对应参数有注解,此处会进行验证,若有误,则返回true,执行方法体
     if (result.hasErrors()) {
         //  执行方法体返回登录页面,通常用于非空校验和用户输入的值的格式校验
         return "doLogin";
     }
     //  若正则验证通过,及执行登录方法
     User user1 = userService.doLogin(user);   //  判断用户输入的信息与数据库是否匹配,匹配则user1不为空
     if (user1 != null) {
         //  登录成功,将查询出来的用户信息存入session域
         //  该操作可用于回显用户信息(用户昵称,上次登录时间,登录次数等等)以及未登录访问页面的拦截器
         session.setAttribute("LOGIN_USER", user1);
         //  登录成功,记录本次登录时间
         userService.upTime(user1);   //  细节:在存session域之后刷新登录时间,刚刚存入session域中对象的登录时间即为上次登录时间
         String rem = request.getParameter("rem");   //  通过request域对象获取前端页面传来的复选框(记住密码)的值
         //   创建cookie对象,对象中登录成功存查询出的对象的用户名和密码
         cookie cookie = new cookie("usermsg", user1.getName() + "_" + user1.getPwd());
         if (rem != null) {   //   如果复选框rem的值不为空,说明用户要求记住密码
             cookie.setMaxAge(60 * 60 * 24 * 3);   //  此行代码的作用是设置cookie的生存时间,以秒为单位
         } else {
             cookie.setMaxAge(0);   //  没有要求记住密码,cookie生存时间设置为0
         }
         cookie.setPath("/");   //  此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp)
         //   因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie
         response.addcookie(cookie);   //  通过response.addcookie(cookie cookie)向客户端设置cookie。
     } else {
         //  登录失败,前台输入的值和数据库不匹配,通过双form表单属性提示错误信息
         result.rejectValue("pwd", null, "账号密码不一致!");    //  可自定义,不会使用双form表单的朋友忽略这里
         return "doLogin";   //  登录失败返回登录页面
     }
     return "redirect:showPact";   //  登录成功则重定向至 展示信息页面
 }

前端页面代码及注释详解:

对应代码如下:拿去测试

<%--前端页面java小脚本--%>
<%
    //  此处定义的三个空字符串便于下面存值与回显
    String name = "";
    String pwd = "";
    String rem = "";
    
    cookie[] arr = request.getcookies();
    
    if (arr != null) {
        for (cookie cookie : arr) {  //   遍历该cookie数组
            //  若刚刚存在cookie中的name值等于cookie对象中的name值,则说明该cookie存在
            if ("usermsg".equals(cookie.getName())) {
                String value = cookie.getValue();   //  获取对应名称的value
                String[] s = value.split("_");   //  存入时以什么分割这里就以什么切割,由你来决定
                name = s[0];   //   分别给上面预定义的字符串赋值,便于页面回显
                pwd = s[1];
                rem = "checked";   //  进入该方法体则说明记住密码被选中,将它勾选
            }
        }
    }
%>
<%--@elvariable id="user" type="com.yangziqiang.entity.User"--%>
<%--这里使用了双form表单,不会使用者忽略正常写即可,path对应的即name属性--%>

    <%--嵌入java小脚本,该表达式可获取name中的值--%>
    用户名: 
       <%--双form表单特性:用于存放错误信息--%>
    

密 码:

>记录登录密码

前往注册

一行代码,一行注释;耐心阅读,掌握逻辑,编程其实并没有想象中那么复杂~

这里没有做登录失败次数限制处理,后续会加入

登录拦截器的使用详解(未登录不允许访问除登录外的页面,登录过期等):

简单的登录拦截示例---HandlerInterceptor拦截器的使用【一看就懂】


如有错误,欢迎指正

Thanks

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号