Parcourir la source

Modify code; resolve pb that wrong username can log in

admin il y a 1 an
Parent
commit
0efec68395
21 fichiers modifiés avec 712 ajouts et 0 suppressions
  1. 76 0
      ajaxSpringBoot/pom.xml
  2. 12 0
      ajaxSpringBoot/src/main/java/org/example/Main.java
  3. 39 0
      ajaxSpringBoot/src/main/java/org/example/controller/BaseController.java
  4. 35 0
      ajaxSpringBoot/src/main/java/org/example/controller/UserController.java
  5. 44 0
      ajaxSpringBoot/src/main/java/org/example/entity/User.java
  6. 29 0
      ajaxSpringBoot/src/main/java/org/example/mapper/UserMapper.java
  7. 23 0
      ajaxSpringBoot/src/main/java/org/example/service/IUserService.java
  8. 64 0
      ajaxSpringBoot/src/main/java/org/example/service/Impl/UserServieImpl.java
  9. 22 0
      ajaxSpringBoot/src/main/java/org/example/service/PasswordNotException.java
  10. 24 0
      ajaxSpringBoot/src/main/java/org/example/service/ServiceException.java
  11. 23 0
      ajaxSpringBoot/src/main/java/org/example/service/UsernameDuplicateException.java
  12. 25 0
      ajaxSpringBoot/src/main/java/org/example/service/UsernameNotFoundException.java
  13. 63 0
      ajaxSpringBoot/src/main/java/org/example/utils/JsonResult.java
  14. 5 0
      ajaxSpringBoot/src/main/resources/application.properties
  15. 45 0
      ajaxSpringBoot/src/main/resources/mappers/UserMapper.xml
  16. 13 0
      ajaxSpringBoot/src/main/resources/static/index.html
  17. 1 0
      ajaxSpringBoot/src/main/resources/static/jquery-3.4.1.min.js
  18. 41 0
      ajaxSpringBoot/src/main/resources/static/login.html
  19. 41 0
      ajaxSpringBoot/src/main/resources/static/register.html
  20. 46 0
      ajaxSpringBoot/src/test/java/UserMapperTest.java
  21. 41 0
      ajaxSpringBoot/src/test/java/UserServiceTest.java

+ 76 - 0
ajaxSpringBoot/pom.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>ajaxSpringBoot</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.2.RELEASE</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+            <!--<scope>provided</scope>-->
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 12 - 0
ajaxSpringBoot/src/main/java/org/example/Main.java

@@ -0,0 +1,12 @@
+package org.example;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+public class Main {
+    public static void main(String[] args){
+        SpringApplication.run(Main.class, args);
+    }
+}

+ 39 - 0
ajaxSpringBoot/src/main/java/org/example/controller/BaseController.java

@@ -0,0 +1,39 @@
+package org.example.controller;
+
+import org.apache.tomcat.util.http.fileupload.FileUploadException;
+import org.example.service.PasswordNotException;
+import org.example.service.ServiceException;
+import org.example.service.UsernameDuplicateException;
+import org.example.service.UsernameNotFoundException;
+import org.example.utils.JsonResult;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+/**
+ * 控制器基类
+ */
+public abstract class BaseController {
+
+    /**
+     * 返回成功状态码2000
+     */
+    public static final int SUCCESS=2000;
+
+    @ExceptionHandler({ServiceException.class, FileUploadException.class})
+    public JsonResult<Void> handleException(Throwable ex) {
+
+        JsonResult<Void> jsonResult=new JsonResult<>(ex);
+
+        if(ex instanceof UsernameDuplicateException){
+            //用户名被占用  -  2002
+            jsonResult.setState(2002);
+        }else if(ex instanceof UsernameNotFoundException){
+            //用户名找不到  -  2003
+            jsonResult.setState(2003);
+        }else if(ex instanceof PasswordNotException){
+            //密码错误
+            jsonResult.setState(2004);
+        }
+        //返回响应值
+        return jsonResult;
+    }
+}

+ 35 - 0
ajaxSpringBoot/src/main/java/org/example/controller/UserController.java

@@ -0,0 +1,35 @@
+package org.example.controller;
+
+import org.example.entity.User;
+import org.example.service.IUserService;
+import org.example.utils.JsonResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpSession;
+
+@RestController
+@RequestMapping("users")
+public class UserController extends BaseController{
+
+    @Autowired
+    private IUserService userService;
+
+    @PostMapping("reg")
+    public JsonResult<Void> reg(User user)  {
+        userService.reg(user);
+        return new JsonResult<>(SUCCESS);
+    }
+
+    @RequestMapping("login")
+    public JsonResult<User> login(String username, String password, HttpSession session){
+        User data = userService.login(username,password);
+        session.setAttribute("uid",data.getId());
+        session.setAttribute("username",data.getUsername());
+
+
+        return new JsonResult<>(SUCCESS,data);
+    }
+}

+ 44 - 0
ajaxSpringBoot/src/main/java/org/example/entity/User.java

@@ -0,0 +1,44 @@
+package org.example.entity;
+
+import java.util.Objects;
+
+public class User {
+
+    //序列化版本号
+    private static final long serialVersionUID = 1L;
+    private Integer id;
+    private String username;
+    private String password;
+
+    //getter和settte方法、tostring 等方法自己写 !!
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String toString(){
+
+        return "username: " + getUsername() + "; password: "+ getPassword() +"; id: " + getId();
+    }
+}

+ 29 - 0
ajaxSpringBoot/src/main/java/org/example/mapper/UserMapper.java

@@ -0,0 +1,29 @@
+package org.example.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.example.entity.User;
+
+@Mapper
+public interface UserMapper {
+    /**
+     * 用户添加
+     * @param user
+     * @return
+     */
+    Integer insert(User user);
+
+    /**
+     * 查找用户名
+     * @param username
+     * @return
+     */
+    User findByUsername(String username);
+
+    /**
+     * 根据id查找信息
+     * @param id
+     * @return
+     */
+    User findById(Integer id);
+
+}

+ 23 - 0
ajaxSpringBoot/src/main/java/org/example/service/IUserService.java

@@ -0,0 +1,23 @@
+package org.example.service;
+
+
+import org.example.entity.User;
+
+public interface IUserService {
+
+    /**
+     * 用户注册
+     * @param
+     * @return
+     */
+    void reg(User user);
+
+    /**
+     * 用户登录
+     * @param username
+     * @param password
+     * @return
+     */
+    User login(String username, String password);
+
+}

+ 64 - 0
ajaxSpringBoot/src/main/java/org/example/service/Impl/UserServieImpl.java

@@ -0,0 +1,64 @@
+package org.example.service.Impl;
+
+import org.example.entity.User;
+import org.example.mapper.UserMapper;
+import org.example.service.IUserService;
+import org.example.service.PasswordNotException;
+import org.example.service.UsernameNotFoundException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserServieImpl implements IUserService {
+
+    @Autowired
+    private UserMapper userMapper;
+
+    //用户注册业务逻辑
+    @Override
+    public void reg(User user) {
+        System.out.print(user.getUsername());
+        System.out.print(user.getPassword());
+        //判断用户名是否为null
+        String username = user.getUsername();
+        User result = userMapper.findByUsername(username);
+
+        if(result != null){
+            throw new UsernameNotFoundException("注册名被占用");
+        }
+
+        String password=user.getPassword();
+        user.setUsername(username);
+        user.setPassword(password);
+
+
+        System.out.print(result);
+
+        userMapper.insert(user);
+    }
+
+    //用户登录业务逻辑
+    @Override
+    public User login(String username, String password) {
+        System.out.println(username+ " "+ password);
+        User result=userMapper.findByUsername(username);
+
+        try{
+        if(result.equals("")){
+            throw new UsernameNotFoundException("用户名不存在");
+        }}
+        catch (NullPointerException e){
+            throw new UsernameNotFoundException("用户名不存在");
+        }
+
+        if(!password.equals(result.getPassword())){
+            throw new PasswordNotException("密码错误");
+        }
+
+        User user =new User();
+        user.setUsername(username);
+        user.setPassword(password);
+
+        return user;
+    }
+}

+ 22 - 0
ajaxSpringBoot/src/main/java/org/example/service/PasswordNotException.java

@@ -0,0 +1,22 @@
+package org.example.service;
+
+public class PasswordNotException extends ServiceException {
+    public PasswordNotException() {
+    }
+
+    public PasswordNotException(String message) {
+        super(message);
+    }
+
+    public PasswordNotException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public PasswordNotException(Throwable cause) {
+        super(cause);
+    }
+
+    public PasswordNotException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 24 - 0
ajaxSpringBoot/src/main/java/org/example/service/ServiceException.java

@@ -0,0 +1,24 @@
+package org.example.service;
+
+
+public class ServiceException extends RuntimeException{
+
+    public ServiceException() {
+    }
+
+    public ServiceException(String message) {
+        super(message);
+    }
+
+    public ServiceException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ServiceException(Throwable cause) {
+        super(cause);
+    }
+
+    public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 23 - 0
ajaxSpringBoot/src/main/java/org/example/service/UsernameDuplicateException.java

@@ -0,0 +1,23 @@
+package org.example.service;
+
+public class UsernameDuplicateException extends ServiceException {
+
+    public UsernameDuplicateException() {
+    }
+
+    public UsernameDuplicateException(String message) {
+        super(message);
+    }
+
+    public UsernameDuplicateException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public UsernameDuplicateException(Throwable cause) {
+        super(cause);
+    }
+
+    public UsernameDuplicateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 25 - 0
ajaxSpringBoot/src/main/java/org/example/service/UsernameNotFoundException.java

@@ -0,0 +1,25 @@
+package org.example.service;
+
+import org.apache.ibatis.executor.ExecutorException;
+
+public class UsernameNotFoundException extends ServiceException  {
+
+    public UsernameNotFoundException() {
+    }
+
+    public UsernameNotFoundException(String message) {
+        super(message);
+    }
+
+    public UsernameNotFoundException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public UsernameNotFoundException(Throwable cause) {
+        super(cause);
+    }
+
+    public UsernameNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 63 - 0
ajaxSpringBoot/src/main/java/org/example/utils/JsonResult.java

@@ -0,0 +1,63 @@
+package org.example.utils;
+
+public class JsonResult<T> {
+
+    private Integer state;
+    private T data;
+    private String message;
+
+    public JsonResult() {
+        super();
+    }
+
+    /**
+     * 返回异常信息
+     * @param e
+     */
+    public JsonResult(Throwable e){
+        this.message=e.getMessage();
+    }
+
+    /**
+     * 返回状态码和data响应数据类型
+     * @param state
+     * @param data
+     */
+    public JsonResult(Integer state, T data) {
+        this.state = state;
+        this.data = data;
+    }
+
+    public JsonResult(Integer state, String message) {
+        this.state = state;
+        this.message = message;
+    }
+
+    public JsonResult(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 5 - 0
ajaxSpringBoot/src/main/resources/application.properties

@@ -0,0 +1,5 @@
+spring.datasource.url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+spring.datasource.username=root
+spring.datasource.password=5608095liyukun
+
+mybatis.mapper-locations=classpath:mappers/*.xml

+ 45 - 0
ajaxSpringBoot/src/main/resources/mappers/UserMapper.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
+        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
+
+<mapper namespace="org.example.mapper.UserMapper">
+
+    <!--用户添加-->
+    <!-- Integer insert(User user) -->
+    <insert id="insert" useGeneratedKeys="true"
+            keyProperty="id">
+        INSERT INTO users(
+        id,username,
+        password
+        )VALUES(
+        #{id},#{username},
+        #{password}
+        )
+    </insert>
+
+    <!--查找用户名-->
+    <!--User findByUsername(String username)-->
+    <select id="findByUsername" resultType="org.example.entity.User">
+        SELECT
+        id,username,
+        password
+        FROM
+        users
+        WHERE
+        username=#{username}
+    </select>
+
+    <!-- id查找用户 -->
+    <!-- User findById(Integer id) -->
+    <select id="findById" resultType="org.example.entity.User">
+        SELECT
+        id,username,
+        password
+        FROM
+        users
+        WHERE
+        id=#{id}
+    </select>
+
+
+</mapper>

+ 13 - 0
ajaxSpringBoot/src/main/resources/static/index.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>主页</title>
+</head>
+<body>
+<a href="register.html">Register</a>
+<a href="login.html">Login</a>
+
+
+</body>
+</html>

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
ajaxSpringBoot/src/main/resources/static/jquery-3.4.1.min.js


+ 41 - 0
ajaxSpringBoot/src/main/resources/static/login.html

@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>登录页面</title>
+    <script src="jquery-3.4.1.min.js"></script>
+</head>
+<body>
+<form id="form-login">
+    <center>
+        <tr>
+            <td><input type="text" id="username" name="username"></td><br>
+            <td><input type="password" id="password" name="password"></td><br>
+            <td><input type="button" value="登录" id="btn-login"></td>
+            <a href="register.html">已有账号,进入注册界面</a>
+        </tr>
+    </center>
+</form>
+
+<script type="text/javascript">
+    $("#btn-login").click(function() {
+        // alert("准备注册!");
+        $.ajax({
+            "url":"/users/login",
+            "data":$("#form-login").serialize(),
+            "type":"get",
+            "dataType":"json",
+            "success":function (json) {
+                if (json.state == 2004 || json.state == 2003) {
+                    alert("登录失败:"+json.message);
+                } else {
+                    alert("登录成功:");
+                    location.href="index.html";
+                }
+            }
+        });
+    });
+</script>
+
+</body>
+</html>

+ 41 - 0
ajaxSpringBoot/src/main/resources/static/register.html

@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>注册页面</title>
+    <script src="jquery-3.4.1.min.js"></script>
+</head>
+<body>
+<form id="form-reg">
+    <center>
+        <tr>
+            <td><input type="text" id="username" name="username"></td><br>
+            <td><input type="password" id="password" name="password"></td><br>
+            <td><input type="button" value="注册" id="btn-reg"></td>
+            <a href="login.html">没有账号,进入登录界面</a>
+        </tr>
+    </center>
+</form>
+
+<script type="text/javascript">
+    $("#btn-reg").click(function() {
+        // alert("准备注册!");
+        $.ajax({
+            "url":"/users/reg",
+            "data":$("#form-reg").serialize(),
+            "type":"post",
+            "dataType":"json",
+            "success":function (json) {
+                if (json.state == 2002) {
+                    alert("注册失败:"+json.message);
+                } else {
+                    alert("注册成功:");
+                    location.href="index.html";
+                }
+            }
+        });
+    });
+</script>
+
+</body>
+</html>

+ 46 - 0
ajaxSpringBoot/src/test/java/UserMapperTest.java

@@ -0,0 +1,46 @@
+
+import org.example.Main;
+import org.example.entity.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest(classes = Main.class)
+public class UserMapperTest {
+
+    @Autowired
+    private UserMapper userMapper;
+
+    //测试添加数据
+//    @Test
+//    public void insert(){
+//        User user=new User();
+//        String username="zhangsan";
+//        String password="123456";
+//        Integer id=2;
+//        user.setId(id);
+//        user.setPassword(password);
+//        user.setUsername(username);
+//        Integer rows=userMapper.insert(user);
+//        System.out.println(rows);
+//    }
+    //测试查找用户名
+    @Test
+    public void findByUsername(){
+        String username="zhangsan";
+        User result=userMapper.findByUsername(username);
+        System.out.println(result.getUsername());
+    }
+    //测试根据id查找内容
+    @Test
+    public void findById(){
+        Integer id=2;
+        User result=userMapper.findById(id);
+        System.out.println(result.toString());
+    }
+
+}
+

+ 41 - 0
ajaxSpringBoot/src/test/java/UserServiceTest.java

@@ -0,0 +1,41 @@
+import org.example.Main;
+import org.example.entity.User;
+import org.example.service.IUserService;
+import org.example.service.ServiceException;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest(classes = Main.class)
+public class UserServiceTest {
+
+    @Autowired
+    private IUserService userService;
+
+//    @Test
+//    public void reg(){
+//        User user=new User();
+//        String username="zhang";
+//        String password="123456";
+//        Integer id=3;
+//        user.setId(id);
+//        user.setPassword(password);
+//        user.setUsername(username);
+//        userService.reg(user);
+//
+//    }
+
+    @Test
+    public void login(){
+        try {
+            String username="root";
+            String password ="1234";
+            User Result=userService.login(username, password);
+            System.err.println(Result);
+
+        } catch (ServiceException e) {
+            System.err.println(e.getClass().getName());
+            System.err.println(e.getMessage());
+        }
+    }
+}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff