初识登录

登录的应用场景

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

搭建环境

本文使用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. 013_go语言中的函数多返回值

    代码演示 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b : ...

  2. 用python写网路爬虫 PDF高清完整版免费下载 Python基础教程免费电子书 python入门书籍免费下载

    <用python写网路爬虫PDF免费下载>PDF书籍下载 内容简介 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你 ...

  3. java 接口二

    一 接口的多实现 接口最重要的体现:解决多继承的弊端.将多继承这种机制在java中通过多实现完成了. interface Fu1 { void show1(); } interface Fu2 { v ...

  4. Android开发进程0.1 轮播图 Scrollview Fragment

    轮播图的实现 轮播图通过banner可以较为便捷的实现 1.添加本地依赖,在dependence中搜索相关依赖 2.添加banner的view组件 3.创建适配器GlideImageLoader ex ...

  5. Java的注解浅析

    人的一生就像一篇文章,只有经过多次精心修改,才能不断完善 Java注解概念理解: Java注解又称为Java标注,是JDK5引入的一中注释机制,Java中大家熟悉的五种注解分别是:@Override, ...

  6. 【POJ3071】Football - 状态压缩+期望 DP

    Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2 ...

  7. Javascript之其实我觉得原型链没有难的那么夸张!

    原型链.闭包.事件循环等,可以说是js中比较复杂的知识了,复杂的不是因为它的概念,而是因为它们本身都涉及到很多的知识体系.所以很难串联起来,有一个完整的思路.我最近想把js中有点意思的知识都总结整理一 ...

  8. JAVA 下载单个文件

    public void toDownLoad(String ape505, HttpServletRequest request, HttpServletResponse response) thro ...

  9. java class类和object类

    Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...

  10. Javascript模块化编程(一):模块的写法 (转)

    Javascript模块化编程(一):模块的写法 原文作者: 阮一峰 日期: 2012年10月26日 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞 ...