初识登录

登录的应用场景

登录比较常见,大多数网站都有登录的操作。然后登录本身也从简单到复杂有着漫长的发展历史。本文记录博主对登录的应用场景的剖析,深究不在于学习如何实现,主要关注其编码思想,过程中用到的技术,以及改进的可能。

搭建环境

本文使用SSM框架构建登录的场景,网页不采用jsp技术,而是用thymeleaf来构建模板。

  • 简单的网页login.html

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <title>登录</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- jquery -->
    <script type="text/javascript" th:src="@{/js/jquery.min.js}"></script>
    <!-- jquery-validator -->
    <script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script>
    <script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script> </head>
    <body> <form name="loginForm" id="loginForm" method="post" style="width:30%; margin:0 auto;"> <h2 style="text-align:center; margin-bottom: 20px">用户登录</h2> <div>
    <div>
    <label>请输入手机号码</label>
    <div >
    <input id="mobile" name = "mobile" type="text" placeholder="手机号码"/>
    </div>
    </div>
    </div> <div>
    <div>
    <label>请输入密码</label>
    <div>
    <input id="password" name="password" type="password" placeholder="密码"/>
    </div>
    </div>
    </div> <div style="margin-top:40px;">
    <div >
    <button type="submit" onclick="login()">登录</button>
    </div>
    </div> </form>
    </body>
    <script>
    //此处增加验证代码
    // function login(){
    // $("#loginForm").validate({
    //
    // submitHandler:function(form){
    // doLogin();
    // }
    // });
    // }
    function login(){ $.ajax({
    url: "/login/do_login",
    type: "POST",
    data:{
    mobile:$("#mobile").val(),
    password: $("#password").val()
    },
    success:function(data){
    alert(data)
    //逻辑判断代码,暂时不写
    }
    });
    }
    </script>
    </html>

    网页做了个及其简陋的页面,但对于登录的逻辑判断已然足够。在springboot环境下,该html页面一定要放在resource目录下的templates子目录下,才会被视图解析器拿到。

  • 搭建依赖包环境-pom文件

   

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.mybatis.spring.boot</groupId>-->
<!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--<version>1.3.1</version>-->
<!--</dependency>--> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!--<dependency>-->
<!--<groupId>com.alibaba</groupId>-->
<!--<artifactId>druid</artifactId>-->
<!--<version>1.0.5</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>redis.clients</groupId>-->
<!--<artifactId>jedis</artifactId>-->
<!--</dependency>--> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<!-- 参数校验工具 -->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-validation</artifactId>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-amqp</artifactId>-->
<!--</dependency>-->
</dependencies>

这里主要导入spring相关的包,spring-boot-starter-web以及spring-boot-starter-thymeleaf,因为springboot可以一键搭建环境,此处暂时不做配置,如需配置,只需要在resource下创建application.yml文件即可。

  • 创建实体类domain

  对于登录功能而言,需要的一定是一个用户的实体类,因为我们网页只有手机号和密码两个属性,因此用户实体类也只有这两个属性

public class Person {

//    @NotNull
private String mobile; private String password; @Override
public String toString() {
return "Person{" +
"mobile='" + mobile + '\'' +
", password='" + password + '\'' +
'}';
} public String getMobile() {
return mobile;
} public void setMobile(String mobile) {
this.mobile = mobile;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

实体类的属性上可以添加验证标签,但现在先跳过。

  • 创建springboot的启动类

  

@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class);
}
}

该类要放在所有类的父包之上,保证能扫描到所有的类。

  • 创建LoginController类

  

@Controller
@RequestMapping("/login")
public class LoginController { @RequestMapping("/to_login")
public String tologin(){
return "login";
} @RequestMapping("/do_login")
@ResponseBody
public String dologin(HttpServletResponse response, Person person){ System.out.println(person);
return person.toString();
}
}
  • 测试

  做到这里,已经完成了SSM环境的搭建,启动MyApplication类的main方法,springboot会自动的加载各种资源,并开启tomcat。

  打开浏览器,输入网址:http://localhost:8080/login/to_login  即可跳转到login.html页面上

输入手机号码和密码点击登录,实现登录请求。

以上就是环境搭建的全过程


搭建完环境以后,会发现此刻点登陆按钮,会在页面弹出用户的信息。基本的功能已经实现,假设现在已经做好了数据库查询的功能,则需要对controller类做进一步的改进,来实现真正的登陆操作

此时,需要对controller类中的response返回对象做一些要求,最好是带有一定的规则约束,比如{code:xx,msg:xx,date:xx}这种类型。

  • 创建Result<>类,泛型类

  

public class Result<T> {

    private Integer code;
private String Msg;
private T date; @Override
public String toString() {
return "Result{" +
"code=" + code +
", Msg='" + Msg + '\'' +
", date=" + date +
'}';
} public Integer getCode() {
return code;
} public void setCode(Integer code) {
this.code = code;
} public String getMsg() {
return Msg;
} public void setMsg(String msg) {
Msg = msg;
} public T getDate() {
return date;
} public void setDate(T date) {
this.date = date;
}
}

上述结果类的定义比较简单,可以在后面逐渐完善

  • 建立Service类,来提供登陆验证的方法

  因为之前没有建立与数据库的连接,因此,这里先模拟数据库的连接。

@Service
public class UserService { //1.登录 public Result<Boolean> login(Person person){ Result<Boolean> re=new Result<Boolean>(); Person persondb=personByMobile(person.getMobile()); if(persondb==null){
re.setCode(0);
re.setMsg("查无此人");
re.setDate(false);
}else if(!persondb.getPassword().equals(person.getPassword())){
re.setCode(01);
re.setMsg("密码错误");
re.setDate(false);
}else{
re.setCode(1);
re.setMsg("登录成功");
re.setDate(true);
} return re;
} //2.根据用户手机查询用户
public Person personByMobile(String mobile){ Person person=new Person();
person.setMobile("123");
person.setPassword("123"); if(mobile.equals(person.getMobile())){
return person;
}else
{
return null;
}
} }

以上代码,仍然是一个比较简单,只用来实现功能的代码,后期需要不断修改。

  • 修改LoginController类如下:

  

@Controller
@RequestMapping("/login")
public class LoginController { @Autowired
UserService userService; @RequestMapping("/to_login")
public String tologin(){
return "login";
} @RequestMapping("/do_login")
@ResponseBody
public Result<Boolean> dologin(HttpServletResponse response, Person person){ System.out.println(person); Result<Boolean> result = userService.login(person); return result;
}
}

此时返回的数据data就是Result<Boolean>类型的数据格式。启动项目,在浏览器中按F12对response回来的数据进行查看,但此时页面已经刷新,无法看到,可以通过修改ajax的success处代码,将code,msg。data都打印出来观看。

以上,登录的验证功能用提升了一下。

 

java初探(1)之登录初解的更多相关文章

  1. [java初探总结篇]__java初探总结

    前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...

  2. [java初探10]__关于数字处理类

    前言 在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类 java中的数字处理类包括: ...

  3. Java 实现 ssh命令 登录主机执行shell命令

    Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SS ...

  4. java初探(1)之登录总结

    登录总结 前几章总结了登录各个步骤中遇到的问题,现在完成的做一个登录的案例,其难点不在于实现功能,而在于抽象各种功能模块,提高复用性,较低耦合度. 前端页面: 对于前端页面来说,不是后端程序员要考虑的 ...

  5. java初探(1)之登录再探

    https://www.cnblogs.com/lovejune/p/java_login_1.html 上一章内容搭建起了登录应用场景的环境,模拟实现了登录操作,页面与后端数据的交互过程,使用的是异 ...

  6. java初探(1)之登录补充

    在登录之后,可能服务器是分布式的,因此不能通过一个本地的session来管理登录信息,导致登录的信息不能传递,即在这台服务器上可以得到用户登录信息,但在那台就得不到.因此,需要设置分布式的sessio ...

  7. java初探(1)之登录终探

    上一章讲了表单验证,数据验证和加密.这一章,将研究服务器和数据库的交互过程. 后端服务器有两种主流的形式,SQL数据库和NOSQL数据库.其中MYSQL属于SQL数据库,REDIS属于非SQL数据库. ...

  8. Java简单示例-用户登录、单个页面的增删改查及简单分页

    index.html  -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...

  9. jasig CAS 实现单点登录 - java、php客户端登录实现

    jasig CAS项目本身就是一个完整的CAS单点登录服务 1.服务端需要把  认证处理类.用户属性返回值处理类 调整成我们自己处理类即可实现单点登录 2.java客户端需要引入cas-client- ...

随机推荐

  1. excel-填充

    问题[1]:需要将一列元素的空全部填充为NULL 选定列->F5定位(推荐先定位行总数)->再次F5定位(选空值)->在选定后的一个框内输入NULL->ctrl+enter 完 ...

  2. 关于海思SDK在Ubuntu下安装错误问题

    在Ubuntu下安装海思sdk时,直接运行安装脚本,会有如下提示: ./sdk.unpack  ./sdk.unpack: 2: ./sdk.unpack: source: not found ./s ...

  3. 关于Exceptionless日志收集框架如何关闭磁盘缓存

    问题:在使用Exceptionless的时候,Exception在收集到日志时会默认在appdata里面缓存当条日志的缓存文件,时间久了之后,如果收集到的日志越多磁盘的空间就会不足. 我使用的环境是 ...

  4. 使用 Python 为女神挑选口红

    口红对于女生来说永远不嫌多,而男生也搞不明白珊瑚红.番茄色.斩男色等等颜色有什么区别,不都是红色么?当送给女神的口红是她不适合的,那结果就是口红进入垃圾箱还算是轻的,重则拉黑处理.男生们也不用着急,我 ...

  5. 事件 - DOM编程

    何为 DOM 事件,HTML DOM 使JavaScript 有能力对 HTML 事件做出反应. 1. 事件流 一个 DOM 事件可以分为捕获过程.触发过程.冒泡过程. 下面一个<a>元素 ...

  6. 2020重新出发,JAVA学前了解,Windosws常用快捷键

    前言:windows 常用快捷键 标准计算机键盘共104键,除了26个字母键.符号键.数字键外,剩下的都是一些功能键: 键盘功能键 常用功能键:Esc.Tab.Caps Lock.Shift.Ctrl ...

  7. 2020重新出发,JAVA入门,标识符&修饰符

    标识符(Identifier ) 标识符是程序员用来命名变量,方法,类或标签的单词,其实就是我们在开发过程中凡是自己可以命名的一些单词就是标识符 标识符命名规则 标识符由字母(a-z,A-Z),数字( ...

  8. 阿里出品的最新版 Java 开发手册,嵩山版,扫地僧

    说起嵩山,我就想起乔峰,想起慕容复,以及他们两位老爹在少林寺大战的场景.当然了,最令我印象深刻的就是那位默默无闻,却一鸣惊人的扫地僧啊.这次,阿里出品的嵩山版 Java 开发手册的封面就有一个扫地僧, ...

  9. 《SOD框架企业级应用数据架构实战》新书简介和预定

    SOD框架“企业级”应用数据架构实战 ----致敬平凡的程序员! 历时两年写成, 两大MVP: 张善友. 刘冰(宇内流云) JAVA技术专家 申毅 联合推荐! 10年磨一剑:汇聚作者超过10年的架构工 ...

  10. Java—构造方法及this/super/final/static关键字

    构造方法 构建创造时用的方法,即就是对象创建时要执行的方法. //构造方法的格式: 修饰符 构造方法名(参数列表) { } 构造方法的体现: 构造方法没有返回值类型.也不需要写返回值.因为它是为构建对 ...