美文网首页
接口开发示例之登录接口开发

接口开发示例之登录接口开发

作者: 早起有虫吃 | 来源:发表于2018-11-07 16:16 被阅读31次

    为了方便后续的接口测试分享,本次特开发一登录接口,以供参考
    环境介绍:
    mysql,tomcat 8,idea

    开发完成后的目录结构: image.png

    下面开始我们的接口开发
    1.mysql创建用户表

    CREATE TABLE `user` (
       `id` INT(11) NOT NULL AUTO_INCREMENT,
       `name` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
       `pwd` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
       `email` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
       `phone` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
       `addr` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
       `token` VARCHAR(1000) COLLATE utf8_bin DEFAULT NULL,
    
       PRIMARY KEY (`id`)
     ) ENGINE=INNODB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    

    2.在model目录下创建User类,用于存放用户数据,代码如下

    package com.model;
    
    public class User {
    
        private long id;
        private String name;
        private String pwd;
        private String email;
        private String phone;
        private String addr;
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public void setAddr(String addr) {
            this.addr = addr;
        }
    }
    
    

    3..在mapper目录下创建User.xml文件,代码如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- 设置为UserDao接口方法提供sql语句配置 -->
    <mapper namespace="com.dao.UserDao">
        <!--注意这里的参数类型是parameterType而不是parameterMap,因为返回的是单个类型  -->
        <!--登录语句  -->
    
        <select id="findUserByNameAndPwd"  parameterType="map"  resultType="User">
            select * from user  where name=#{name} and pwd=#{pwd}
        </select>
        <!--更新token语句  -->
        <update id="updateToken" parameterType="map">
            update user set token=#{token} where name =#{name}
        </update>
        <!--查看个人信息语句  -->
        <select id="userInfo"  parameterType="map"  resultType="User">
            select * from user  where name=#{name} and token=#{token}
        </select>   
    </mapper>
    

    4.在dao目录下创建UserDao类,代码如下

    package com.dao;
    
    
    import com.model.User;
    import org.apache.ibatis.annotations.Param;
    
    //该类里面的方法名需要和User.xml里的语句id保持一致
    public interface UserDao {
    
        //根据用户名和密码查询用户
        //注解的两个参数会自动封装成map集合,括号内即为键
        public User findUserByNameAndPwd(@Param("name") String name, @Param("pwd") String pwd);
    
    
        public void updateToken(@Param("name") String name, @Param("token") String token);
        public User userInfo(@Param("name") String name, @Param("token") String token);
        
    }
    

    5.在controller目录下新建UserAction类,代码如下

    package com.controller;
    import com.google.gson.Gson;
    import com.model.User;
    import com.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;
    
    
    @Controller
    @RequestMapping("")
    public class UserAction {
        //注入Service
        List userRespound;
    
    
        @Autowired
        private UserService userService;
    
    
        //登陆接口
        @RequestMapping(value="login",method = {RequestMethod.POST, RequestMethod.GET})
        public void login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            userRespound=new ArrayList();
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String name=request.getParameter("name");
            String password=request.getParameter("pwd");
            System.out.println("用户登录:"+name+password+"方法"+request.getMethod());
    
            User user=userService.login(name,password);
            //登录成功
            if(user!=null){
                userRespound.add("code:1000");
                userRespound.add("name:"+name);
                String token=UUID.randomUUID().toString().replace("-", "");
                //token存入到数据库
                userService.updateToken(name,token);
                userRespound.add("token:"+token);
            }
            //登录失败
            else{
                userRespound.add("code:800");
                userRespound.add("login fail");
            }
            //页面输出josn
            Gson gson = new Gson();
            String json = gson.toJson(userRespound);
            System.out.println(json);
            response.setContentType("text/plain");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = new PrintWriter(response.getOutputStream());
            out.print(json);
            out.flush();
        }
    
        //查看个人信息接口
        @RequestMapping(value="userInfo",method = {RequestMethod.POST, RequestMethod.GET})
        public void userInfo(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            userRespound=new ArrayList();
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String name=request.getParameter("name");
            String token=request.getParameter("token");
    
    
    
            User user=userService.userInfo(name,token);
            //token验证通过
            if(user!=null){
                userRespound.add(user);
                userRespound.add("code:1000");
    
            }
            //token验证失败
            else{
                userRespound.add("code:800");
                userRespound.add("Token failure");
            }
    
            //页面输出json
            Gson gson = new Gson();
            String json = gson.toJson(userRespound);
            System.out.println(json);
            response.setContentType("text/plain");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = new PrintWriter(response.getOutputStream());
            out.print(json);
            out.flush();
    
        }
    }
    
    

    代码部分就到此结束了,开始运行,项目运行后
    在数据库里创建一条用户数据

    image.png
    提交登录的请求 http://localhost:8080/login.action?name=aa&pwd=bb结果如下(每提交一次登录的请求,返回的token都会变) image.png

    提交查看个人信息的接口:http://localhost:8080/userInfo.action?name=aa&token=9107fc7f5f7347ca9e6a7c19a1bb9d5b(token必须取登录返回的token才能请求成功)

    image.png

    相关文章

      网友评论

          本文标题:接口开发示例之登录接口开发

          本文链接:https://www.haomeiwen.com/subject/yewuxqtx.html