From e27b6748c76de4906d346c404ef9cece89b19ed8 Mon Sep 17 00:00:00 2001 From: lan <3440433157@qq.com> Date: Sun, 31 Oct 2021 22:58:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?pratice1:=E5=85=B0=E5=86=9B-2019302650?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jpa-day7/pom.xml | 82 +++++++ .../java/edu/nwpu/JpaDay7Application.java | 24 ++ .../main/java/edu/nwpu/common/Response.java | 35 +++ .../edu/nwpu/config/InterceptorConfig.java | 23 ++ .../edu/nwpu/controller/BookController.java | 97 ++++++++ .../edu/nwpu/controller/LoginController.java | 45 ++++ .../edu/nwpu/controller/UserController.java | 70 ++++++ .../src/main/java/edu/nwpu/dao/BookDao.java | 16 ++ .../src/main/java/edu/nwpu/dao/RecordDao.java | 26 +++ .../src/main/java/edu/nwpu/dao/UserDao.java | 22 ++ .../src/main/java/edu/nwpu/entity/Book.java | 40 ++++ .../src/main/java/edu/nwpu/entity/Record.java | 40 ++++ .../src/main/java/edu/nwpu/entity/User.java | 69 ++++++ .../edu/nwpu/interceptor/AuthInterceptor.java | 40 ++++ .../edu/nwpu/interceptor/LoginInteceptor.java | 59 +++++ .../java/edu/nwpu/service/BookService.java | 38 ++++ .../java/edu/nwpu/service/UserService.java | 27 +++ .../nwpu/service/impl/BookServiceImpl.java | 213 ++++++++++++++++++ .../nwpu/service/impl/UserServiceImpl.java | 126 +++++++++++ .../src/main/java/edu/nwpu/vo/BookVo.java | 18 ++ .../main/java/edu/nwpu/vo/RecordBookVo.java | 29 +++ .../src/main/java/edu/nwpu/vo/RecordVo.java | 29 +++ .../src/main/java/edu/nwpu/vo/ResponseVo.java | 26 +++ .../src/main/java/edu/nwpu/vo/UserVo.java | 18 ++ jpa-day7/src/main/java/edu/util/JwtUtils.java | 42 ++++ jpa-day7/src/main/resources/application.yaml | 15 ++ .../edu/nwpu/JpaDay6ApplicationTests.java | 17 ++ 27 files changed, 1286 insertions(+) create mode 100644 jpa-day7/pom.xml create mode 100644 jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/common/Response.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/controller/BookController.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/controller/UserController.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/entity/Book.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/entity/Record.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/entity/User.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/service/BookService.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/service/UserService.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java create mode 100644 jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java create mode 100644 jpa-day7/src/main/java/edu/util/JwtUtils.java create mode 100644 jpa-day7/src/main/resources/application.yaml create mode 100644 jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java diff --git a/jpa-day7/pom.xml b/jpa-day7/pom.xml new file mode 100644 index 0000000..6231ab3 --- /dev/null +++ b/jpa-day7/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.6 + + + edu.nwpu + jpa-day7 + 0.0.1-SNAPSHOT + + + 1.8 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + + mysql + mysql-connector-java + 8.0.26 + + + com.alibaba + druid-spring-boot-starter + 1.1.24 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + com.auth0 + java-jwt + 3.4.0 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java b/jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java new file mode 100644 index 0000000..f07cf9f --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java @@ -0,0 +1,24 @@ +package edu.nwpu; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + + +@SpringBootApplication(exclude = { SecurityAutoConfiguration.class }) +@EnableJpaRepositories("edu.nwpu.dao") +public class JpaDay7Application { + + public static void main(String[] args) { + SpringApplication.run(JpaDay7Application.class, args); + } + + @Bean + public PasswordEncoder encoder(){ + return new BCryptPasswordEncoder(); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/common/Response.java b/jpa-day7/src/main/java/edu/nwpu/common/Response.java new file mode 100644 index 0000000..a12eec2 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/common/Response.java @@ -0,0 +1,35 @@ +package edu.nwpu.common; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class Response { + //状态码 0-失败 1-成功 + private int code; + //状态信息 + private String msg; + //后端数据 + private Object data; + + public Response() { + } + + public Response(int code, String msg, Object data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public static Response ok(Object data){ + return new Response(1,"ok",data); + } + + public static Response fail(String msg){ + return new Response(0,msg,null); + } + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java b/jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java new file mode 100644 index 0000000..c97aba1 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java @@ -0,0 +1,23 @@ +package edu.nwpu.config; + +import edu.nwpu.interceptor.AuthInterceptor; +import edu.nwpu.interceptor.LoginInteceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Created by Chilly Cui on 2020/9/9. + */ +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LoginInteceptor()) + .addPathPatterns("/api/**") + .excludePathPatterns("/api/login"); + registry.addInterceptor(new AuthInterceptor()) + .addPathPatterns("/api/users","/api/book","/api/user/books","/api/book/record"); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/BookController.java b/jpa-day7/src/main/java/edu/nwpu/controller/BookController.java new file mode 100644 index 0000000..3fcb032 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/controller/BookController.java @@ -0,0 +1,97 @@ +package edu.nwpu.controller; + +import edu.nwpu.common.Response; +import edu.nwpu.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class BookController { + @Autowired + BookService bookService; + + @PostMapping("/book") + @Transactional + public Response addBook(@RequestBody Map map){ + String name = (String) map.get("name"); + String place = (String) map.get("place"); + String introduce = (String) map.get("introduce"); + String author = (String) map.get("author"); + String price = (String) map.get("price"); + return bookService.addBook(name, place, introduce, author, Float.valueOf(price)); + } + + @DeleteMapping("/book") + @Transactional + public Response deleteBook(@RequestBody Map map){ + String bookId = map.get("bookId"); + return bookService.deleteBook(Long.valueOf(bookId)); + } + + @PutMapping("/book") + @Transactional + public Response updateBook(@RequestBody Map map){ + String name = (String) map.get("name"); + String place = (String) map.get("place"); + String introduce = (String) map.get("introduce"); + String author = (String) map.get("author"); + String price = (String) map.get("price"); + String bookId = (String) map.get("bookId"); + return bookService.updateBook(name,place,introduce,author, Float.valueOf(price), Long.valueOf(bookId)); + } + + @GetMapping("/books") + public Response getAllBooks(){ + return bookService.getAllBooks(); + } + + @GetMapping("/book") + public Response getBook(@RequestBody Map map){ + String bookId = map.get("bookId"); + return bookService.getBook(Long.valueOf(bookId)); + } + + @PostMapping("/book/borrow") + @Transactional + public Response borrow(@RequestBody Map map){ + Long bookId = Long.valueOf(map.get("bookId")); + Long userId = Long.valueOf(map.get("userId")); + return bookService.borrowBook(bookId,userId); + } + + @PostMapping("/book/return") + @Transactional + public Response returnBook(@RequestBody Map map){ + Long recordId = Long.valueOf(map.get("recordId")); + Long userId = Long.valueOf(map.get("userId")); + return bookService.returnBook(recordId,userId); + } + + @GetMapping("/book/status") + public Response status(@RequestBody Map map){ + Long bookId = Long.valueOf(map.get("bookId")); + return bookService.status(bookId); + } + + @GetMapping("/book/records") + public Response records(@RequestBody Map map){ + Long bookId = Long.valueOf(map.get("bookId")); + return bookService.records(bookId); + } + + @GetMapping("/user/books") + public Response getUserBooks(@RequestBody Map map){ + Long userId = Long.valueOf(map.get("userId")); + return bookService.getUserBooks(userId); + } + + @GetMapping("/book/record") + public Response record(@RequestBody Map map){ + Long recordId = Long.valueOf(map.get("recordId")); + return bookService.getRecordById(recordId); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java b/jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java new file mode 100644 index 0000000..dabb95b --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java @@ -0,0 +1,45 @@ +package edu.nwpu.controller; + +import edu.nwpu.common.Response; +import edu.nwpu.dao.UserDao; +import edu.nwpu.entity.User; +import edu.nwpu.service.UserService; +import edu.util.JwtUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class LoginController { + @Autowired + UserService userService; + @Autowired + PasswordEncoder passwordEncoder; + + @PostMapping("/login") + public Response login(@RequestBody Map map){ + String username = map.get("username"); + String password = map.get("password"); + User user = userService.findByUsername(username); + if (user==null){ + return Response.fail("用户不存在"); + } + if (!passwordEncoder.matches(password,user.getPassword())){ + return Response.fail("密码错误"); + } + Map res = new HashMap<>(); + res.put("userId",user.getId()+""); + res.put("role",user.getRole()); + String token = JwtUtils.getToken(res); + res.put("access_token",token); + return Response.ok(res); + } + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/UserController.java b/jpa-day7/src/main/java/edu/nwpu/controller/UserController.java new file mode 100644 index 0000000..74b6177 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/controller/UserController.java @@ -0,0 +1,70 @@ +package edu.nwpu.controller; + +import edu.nwpu.common.Response; +import edu.nwpu.entity.User; +import edu.nwpu.service.UserService; +import edu.nwpu.vo.ResponseVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class UserController { + @Autowired + UserService userService; + + @GetMapping("/hello") + public String hello(){ + return "hello jpa"; + } + + @PostMapping("/hello") + public String hello2(String name){ + return "hello "+name; + } + + @PostMapping("/user") + public Response registry(@RequestBody Map map){ + String username = map.get("username"); + String password = map.get("password"); + String email = map.get("email"); + String nickname = map.get("nickname"); + Response response = userService.addUser(username, password, email, nickname,"user"); + System.out.println("添加成功:"+response); + return response; + } + + @PutMapping("/user") + @Transactional//更新、删除等操作需要事务支持 + public ResponseVo updateUser(@RequestBody Map map){ + Long userId = Long.valueOf((String) map.get("userId")); + String email = (String) map.get("email"); + String nickname = (String) map.get("nickname"); + return userService.updateUser(userId,email,nickname); + } + + @PostMapping("/user/password") + @Transactional + public ResponseVo updatePassword(@RequestBody Map map){ + Long userId = Long.valueOf((String) map.get("userId")); + String oldPassword = (String) map.get("oldPassword"); + String newPassword = (String) map.get("newPassword"); + return userService.updatePassword(Long.valueOf(userId),oldPassword,newPassword); + } + + @GetMapping("/user") + public Response findUser(@RequestBody Map map){ + return userService.findByUserId(map.get("userId")); + } + + @GetMapping("users") + public Response findAllUsers(){ + return userService.findUsers(); + } + + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java b/jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java new file mode 100644 index 0000000..e51de94 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java @@ -0,0 +1,16 @@ +package edu.nwpu.dao; + +import edu.nwpu.entity.Book; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +public interface BookDao extends JpaRepository, JpaSpecificationExecutor { + //更新书目信息 + @Query("update Book set name=?1,place=?2,introduce=?3,author=?4,price=?5 where id=?6") + @Modifying + void updateBook(String name, String place, String introduce, String author, float price, Long bookId); + + // +} diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java b/jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java new file mode 100644 index 0000000..c70c31b --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java @@ -0,0 +1,26 @@ +package edu.nwpu.dao; + +import edu.nwpu.entity.Record; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import java.util.Date; +import java.util.List; + +public interface RecordDao extends JpaRepository, JpaSpecificationExecutor { + //查找书目是否借出 + List findByBookId(Long bookId); + + //还书 + @Query("update Record set returnDate=?2 where id=?1") + @Modifying + void returnBook(Long recordId, Date returnDate); + + //指定用户的借书记录 + List findByUserId(Long userId); + + //根据book_id外键查询 + List findByBook_Id(Long bookId); +} diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java b/jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java new file mode 100644 index 0000000..10fd8cd --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java @@ -0,0 +1,22 @@ +package edu.nwpu.dao; + +import edu.nwpu.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +public interface UserDao extends JpaRepository, JpaSpecificationExecutor { + //修改个人信息 + @Query("update User set email = ?1,nickname = ?2 where id = ?3") + @Modifying + void updateUser(String email,String nickname,Long userId); + + //修改密码 + @Query("update User set password = ?1 where id = ?2") + @Modifying + void updatePassword(String newPassword,Long userId); + + //根据用户名 + User findByUsername(String username); +} diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/Book.java b/jpa-day7/src/main/java/edu/nwpu/entity/Book.java new file mode 100644 index 0000000..dc0808c --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/entity/Book.java @@ -0,0 +1,40 @@ +package edu.nwpu.entity; + +import lombok.*; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "book") +public class Book { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "place") + private String place; + + @Column(name = "introduce") + private String introduce; + + @Column(name = "author") + private String author; + + @Column(name = "price") + private float price; + + @OneToMany(mappedBy = "book",cascade = CascadeType.ALL) + private Set records = new HashSet<>(); + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/Record.java b/jpa-day7/src/main/java/edu/nwpu/entity/Record.java new file mode 100644 index 0000000..9e69fcb --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/entity/Record.java @@ -0,0 +1,40 @@ +package edu.nwpu.entity; + +import lombok.*; + +import javax.persistence.*; +import java.util.Date; +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "record") +public class Record { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + +// @Column(name = "book_id") +// private Long bookId; + +// @Column(name = "user_id") +// private Long userId; + + @Column(name = "borrow_date") + private Date borrowDate; + + @Column(name = "return_date") + private Date returnDate; + + @ManyToOne(targetEntity = User.class) + @JoinColumn(name = "user_id",referencedColumnName = "id") + private User user; + + @ManyToOne(targetEntity = Book.class) + @JoinColumn(name = "book_id",referencedColumnName = "id") + private Book book; + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/User.java b/jpa-day7/src/main/java/edu/nwpu/entity/User.java new file mode 100644 index 0000000..87ffec8 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/entity/User.java @@ -0,0 +1,69 @@ +package edu.nwpu.entity; + +import lombok.*; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import javax.persistence.*; +import java.util.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "user") +public class User{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "username") + private String username; + + @Column(name = "password") + private String password; + + @Column(name = "email") + private String email; + + @Column(name = "nickname") + private String nickname; + + @Column(name = "role") + private String role; + + @OneToMany(mappedBy = "user",cascade = CascadeType.ALL) + private Set records = new HashSet<>(); + + +// @Override +// public Collection getAuthorities() { +// List authorities = new ArrayList<>(); +// authorities.add(new SimpleGrantedAuthority(getRole())); +// return authorities; +// } +// +// @Override +// public boolean isAccountNonExpired() { +// return true; +// } +// +// @Override +// public boolean isAccountNonLocked() { +// return true; +// } +// +// @Override +// public boolean isCredentialsNonExpired() { +// return true; +// } +// +// @Override +// public boolean isEnabled() { +// return true; +// } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java b/jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java new file mode 100644 index 0000000..f51329f --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java @@ -0,0 +1,40 @@ +package edu.nwpu.interceptor; + +import com.auth0.jwt.interfaces.DecodedJWT; +import com.fasterxml.jackson.databind.ObjectMapper; +import edu.util.JwtUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class AuthInterceptor implements HandlerInterceptor { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + System.out.println("进入权限认证拦截...."); + if ((request.getMethod().equals("GET")&&request.getRequestURI().equals("/api/book"))|| + (request.getMethod().equals("POST")&&request.getRequestURI().equals("/api/user"))){ + //不拦截GET请求的"/api/book" + //不拦截POST请求的"/api/user" + return true; + } + String token = request.getHeader("access_token"); + DecodedJWT verify = JwtUtils.verify(token); + String role = verify.getClaim("role").asString(); + log.info("当前用户为:"+role); + if (!role.equals("admin")){ + Map map = new HashMap<>(); + map.put("code","0"); + map.put("msg","权限不足"); + String json = new ObjectMapper().writeValueAsString(map); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().println(json); + return false; + } + return true; + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java b/jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java new file mode 100644 index 0000000..4d95e3a --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java @@ -0,0 +1,59 @@ +package edu.nwpu.interceptor; + +import com.auth0.jwt.exceptions.AlgorithmMismatchException; +import com.auth0.jwt.exceptions.InvalidClaimException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.exceptions.TokenExpiredException; +import com.fasterxml.jackson.databind.ObjectMapper; +import edu.util.JwtUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class LoginInteceptor implements HandlerInterceptor { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (request.getMethod().equals("POST")&&request.getRequestURI().equals("/api/user")){ + //注册接口放行 + return true; + } + //获取请求头中的令牌 + String token = request.getHeader("access_token"); + log.info("当前token为:{}", token); + + Map map = new HashMap<>(); + try { + JwtUtils.verify(token); + return true; + } catch (SignatureVerificationException e) { + e.printStackTrace(); + map.put("code", 0); + map.put("msg", "签名不一致"); + } catch (TokenExpiredException e) { + e.printStackTrace(); + map.put("code", 0); + map.put("msg", "令牌过期"); + } catch (AlgorithmMismatchException e) { + e.printStackTrace(); + map.put("code", 0); + map.put("msg", "算法不匹配"); + } catch (InvalidClaimException e) { + e.printStackTrace(); + map.put("code", 0); + map.put("msg", "失效的payload"); + } catch (Exception e) { + map.put("code", 0); + map.put("msg", "token无效"); + } + //响应到前台: 将map转为json + String json = new ObjectMapper().writeValueAsString(map); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().println(json); + return false; + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/service/BookService.java b/jpa-day7/src/main/java/edu/nwpu/service/BookService.java new file mode 100644 index 0000000..8b360bd --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/service/BookService.java @@ -0,0 +1,38 @@ +package edu.nwpu.service; + +import edu.nwpu.common.Response; + +public interface BookService { + //创建书目 + Response addBook(String name,String place,String introduce,String author,float price); + + //删除书目 + Response deleteBook(Long bookId); + + //更新数目 + Response updateBook(String name,String place,String introduce,String author,float price,Long bookId); + + //获取书目列表 + Response getAllBooks(); + + //获取书目信息 + Response getBook(Long bookId); + + //借书 + Response borrowBook(Long bookId,Long userId); + + //还书 + Response returnBook(Long recordId,Long userId); + + //查询指定书目的借还状态 + Response status(Long bookId); + + //获取指定书目的所有借还记录 + Response records(Long bookId); + + //获取指定用户的所有借书记录 + Response getUserBooks(Long userId); + + //通过记录查询书目借还状态 + Response getRecordById(Long recordId); +} diff --git a/jpa-day7/src/main/java/edu/nwpu/service/UserService.java b/jpa-day7/src/main/java/edu/nwpu/service/UserService.java new file mode 100644 index 0000000..a116874 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/service/UserService.java @@ -0,0 +1,27 @@ +package edu.nwpu.service; + +import edu.nwpu.common.Response; +import edu.nwpu.entity.User; +import edu.nwpu.vo.ResponseVo; + +public interface UserService { + //用户添加 + Response addUser(String username,String password,String email,String nickname,String role); + + //获取用户信息 + Response findByUserId(Long userId); + + //获取用户列表 + Response findUsers(); + + //修改用户信息 + ResponseVo updateUser(Long userId,String email,String nickname); + + //修改用户密码 + ResponseVo updatePassword(Long userId, String oldPassword, String newPassword); + + //根据用户名查找用户 + User findByUsername(String username); + + +} diff --git a/jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java b/jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java new file mode 100644 index 0000000..fd513d6 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java @@ -0,0 +1,213 @@ +package edu.nwpu.service.impl; + +import edu.nwpu.common.Response; +import edu.nwpu.dao.BookDao; +import edu.nwpu.dao.RecordDao; +import edu.nwpu.dao.UserDao; +import edu.nwpu.entity.Book; +import edu.nwpu.entity.Record; +import edu.nwpu.entity.User; +import edu.nwpu.service.BookService; +import edu.nwpu.vo.BookVo; +import edu.nwpu.vo.RecordBookVo; +import edu.nwpu.vo.RecordVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; + +import javax.persistence.criteria.*; +import java.util.*; + +@Service +public class BookServiceImpl implements BookService { + @Autowired + UserDao userDao; + @Autowired + BookDao bookDao; + @Autowired + RecordDao recordDao; + @Override + public Response addBook(String name, String place, String introduce, String author, float price) { + Book book = new Book(); + book.setName(name); + book.setPlace(place); + book.setIntroduce(introduce); + book.setAuthor(author); + book.setPrice(price); + Book saveBook = bookDao.save(book); + return Response.ok(saveBook.getId()); + } + + @Override + public Response deleteBook(Long bookId) { + if (isExistBook(bookId)){ + Book book = bookDao.findById(bookId).orElse(null); + bookDao.deleteById(bookId); + Map map = new HashMap<>(); + map.put("name",book.getName()); + map.put("place",book.getPlace()); + map.put("introduce",book.getIntroduce()); + map.put("author",book.getAuthor()); + map.put("price",book.getPrice()); + return Response.ok(map); + } + return Response.fail("书目不存在"); + } + + public boolean isExistBook(Long bookId){ + Book book = bookDao.findById(bookId).orElse(null); + return book!=null; + } + + @Override + public Response updateBook(String name, String place, String introduce, String author, float price, Long bookId) { + if (isExistBook(bookId)){ + bookDao.updateBook(name,place,introduce,author,price,bookId); + Map map = new HashMap<>(); + map.put("name",name); + map.put("place",place); + map.put("introduce",introduce); + map.put("author",author); + map.put("price",price); + return Response.ok(map); + } + return Response.fail("书目不存在"); + } + + @Override + public Response getAllBooks() { + List all = bookDao.findAll(); + List bookVoList = new ArrayList<>(); + for (Book book : all) { + bookVoList.add(new BookVo(book.getId(),book.getName())); + } + return Response.ok(bookVoList); + } + + @Override + public Response getBook(Long bookId) { + if (isExistBook(bookId)){ + Book book = bookDao.findById(bookId).orElse(null); + Map map = new HashMap<>(); + map.put("name",book.getName()); + map.put("place",book.getPlace()); + map.put("introduce",book.getIntroduce()); + map.put("author",book.getAuthor()); + map.put("price",book.getPrice()); + return Response.ok(map); + } + return Response.fail("书目不存在"); + } + + @Override + public Response borrowBook(Long bookId, Long userId) { + Book book = bookDao.findById(bookId).orElse(null); + if (book==null){ + return Response.fail("书目不存在"); + } + User user = userDao.findById(userId).orElse(null); + if (user==null){ + return Response.fail("用户不存在"); + } + if (isBorrowed(bookId)){ + return Response.fail("书目已借出"); + } + Record record = new Record(); + Date borrowDate = new Date(); + record.setBorrowDate(borrowDate); + record.setBook(book); + record.setUser(user); + Record save = recordDao.save(record); + Map map = new HashMap<>(); + map.put("recordId",save.getId()); + map.put("borrowDate",borrowDate); + return Response.ok(map); + } + + public boolean isBorrowed(Long bookId){ + List records = recordDao.findByBookId(bookId); + for (Record record : records) { + if (record.getReturnDate()==null){ + return true; + } + } + return false; + } + + + @Override + public Response returnBook(Long recordId, Long userId) { + User user = userDao.findById(userId).orElse(null); + if (user==null){ + return Response.fail("用户不存在"); + } + Record record = recordDao.findById(recordId).orElse(null); + if (record==null){ + return Response.fail("借书记录不存在"); + } + Date returnDate = new Date(); + recordDao.returnBook(recordId,returnDate); + Map map = new HashMap<>(); + map.put("borrowDate",record.getBorrowDate()); + map.put("returnDate",returnDate); + return Response.ok(map); + } + + @Override + public Response status(Long bookId) { + if (!isExistBook(bookId)){ + return Response.fail("书目不存在"); + } + List records = recordDao.findByBook_Id(bookId); + Record record = records.get(records.size()-1); + Map map = new HashMap<>(); + map.put("userId",record.getUser().getId()); + map.put("borrowDate",record.getBorrowDate()); + map.put("returnDate",record.getReturnDate()); + return Response.ok(map); + } + + @Override + public Response records(Long bookId) { + if (!isExistBook(bookId)){ + return Response.fail("书目不存在"); + } + List records = recordDao.findByBookId(bookId); + List recordVoList = new ArrayList<>(); + for (Record record : records) { + RecordVo recordVo = new RecordVo(record.getId(), record.getUser().getId(), record.getUser().getUsername(), + record.getBorrowDate(), record.getReturnDate()); + recordVoList.add(recordVo); + } + return Response.ok(recordVoList); + } + + @Override + public Response getUserBooks(Long userId) { + User user = userDao.findById(userId).orElse(null); + if (user==null){ + return Response.fail("用户不存在"); + } + List records = recordDao.findByUserId(userId); + List recordBookVoList = new ArrayList<>(); + for (Record record : records) { + recordBookVoList.add(new RecordBookVo(record.getId(), record.getBook().getId(), record.getBook().getName(), + record.getBorrowDate(), record.getReturnDate())); + } + return Response.ok(recordBookVoList); + } + + @Override + public Response getRecordById(Long recordId) { + Record record = recordDao.findById(recordId).orElse(null); + if (record==null){ + return Response.fail("记录不存在"); + } + Map map = new HashMap<>(); + map.put("bookId",record.getBook().getId()); + map.put("userId",record.getUser().getId()); + map.put("borrowDate",record.getBorrowDate()); + map.put("returnDate",record.getReturnDate()); + return Response.ok(map); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java b/jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..e3650f4 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java @@ -0,0 +1,126 @@ +package edu.nwpu.service.impl; + +import edu.nwpu.common.Response; +import edu.nwpu.dao.UserDao; +import edu.nwpu.entity.User; +import edu.nwpu.service.UserService; +import edu.nwpu.vo.ResponseVo; +import edu.nwpu.vo.UserVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.persistence.criteria.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +@Service +public class UserServiceImpl implements UserService { + @Resource + UserDao userDao; + @Autowired + PasswordEncoder passwordEncoder; + @Override + public Response addUser(String username, String password, String email, String nickname,String role) { + User user = findByName(username); + User em = findByEmail(email); + if (user!=null){ + return Response.fail("用户名已占用"); + } + if (em!=null){ + return Response.fail("邮箱已注册"); + } + User myUser = new User(); + myUser.setUsername(username); + myUser.setPassword(passwordEncoder.encode(password)); + myUser.setEmail(email); + myUser.setNickname(nickname); + myUser.setRole(role); + Long id = userDao.save(myUser).getId(); + Map map = new HashMap<>(); + map.put("user_id",id); + return Response.ok(map); + } + + public User findByName(String username){ + Specification spec = new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + Path name = root.get("username"); + Predicate p = criteriaBuilder.equal(name, username); + return p; + } + }; + User user = userDao.findOne(spec).orElse(null); + return user; + } + + public User findByEmail(String email){ + Specification spec = new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + Path e = root.get("email"); + Predicate p = criteriaBuilder.equal(e, email); + return p; + } + }; + User user = userDao.findOne(spec).orElse(null); + return user; + } + + @Override + public Response findByUserId(Long userId) { + User user = userDao.findById(userId).orElse(null); + if (user==null){ + return Response.fail("用户不存在"); + } + Map map = new HashMap<>(); + map.put("username",user.getUsername()); + map.put("nickname",user.getNickname()); + map.put("email",user.getEmail()); + return Response.ok(map); + } + + @Override + public Response findUsers() { + List all = userDao.findAll(); + List userVoList = new ArrayList<>(); + for (User user : all) { + UserVo userVo = new UserVo(user.getId(), user.getUsername()); + userVoList.add(userVo); + } + return Response.ok(userVoList); + } + + @Override + public ResponseVo updateUser(Long userId, String email, String nickname) { + User em = findByEmail(email); + if (em!=null){ + return ResponseVo.fail("邮箱已占有"); + } + userDao.updateUser(email,nickname,userId); + return ResponseVo.ok(); + } + + @Override + public ResponseVo updatePassword(Long userId, String oldPassword, String newPassword) { + User user = userDao.findById(userId).orElse(null); + if (user==null){ + return ResponseVo.fail("用户不存在"); + } + //注意采用BCryptPasswordEncoder来加密,两次相同输入加密后结果也会不同,因此不能使用equals方法,采用内置的方法 + if (!passwordEncoder.matches(oldPassword,user.getPassword())){ + return ResponseVo.fail("密码错误哦"); + } + userDao.updatePassword(passwordEncoder.encode(newPassword),userId); + return ResponseVo.ok(); + } + + @Override + public User findByUsername(String username) { + return userDao.findByUsername(username); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java b/jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java new file mode 100644 index 0000000..cb6845c --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java @@ -0,0 +1,18 @@ +package edu.nwpu.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class BookVo { + private Long bookId; + private String name; + + public BookVo(Long bookId, String name) { + this.bookId = bookId; + this.name = name; + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java b/jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java new file mode 100644 index 0000000..501669f --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java @@ -0,0 +1,29 @@ +package edu.nwpu.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +@Getter +@Setter +@ToString +public class RecordBookVo { + private Long recordId; + private Long bookId; + private String name; + private Date borrowDate; + private Date returnDate; + + public RecordBookVo() { + + } + + public RecordBookVo(Long recordId, Long bookId, String name, Date borrowDate, Date returnDate) { + this.recordId = recordId; + this.bookId = bookId; + this.name = name; + this.borrowDate = borrowDate; + this.returnDate = returnDate; + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java b/jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java new file mode 100644 index 0000000..f881955 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java @@ -0,0 +1,29 @@ +package edu.nwpu.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +@Getter +@Setter +@ToString +public class RecordVo { + private Long recordId; + private Long userId; + private String username; + private Date borrowDate; + private Date returnDate; + + public RecordVo() { + + } + + public RecordVo(Long recordId, Long userId, String username, Date borrowDate, Date returnDate) { + this.recordId = recordId; + this.userId = userId; + this.username = username; + this.borrowDate = borrowDate; + this.returnDate = returnDate; + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java b/jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java new file mode 100644 index 0000000..009b324 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java @@ -0,0 +1,26 @@ +package edu.nwpu.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class ResponseVo { + private int code; + private String msg; + + public ResponseVo(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public static ResponseVo ok(){ + return new ResponseVo(1,"ok"); + } + + public static ResponseVo fail(String msg){ + return new ResponseVo(0,msg); + } +} diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java b/jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java new file mode 100644 index 0000000..2e53c27 --- /dev/null +++ b/jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java @@ -0,0 +1,18 @@ +package edu.nwpu.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class UserVo { + private Long userId; + private String username; + + public UserVo(Long userId, String username) { + this.userId = userId; + this.username = username; + } +} diff --git a/jpa-day7/src/main/java/edu/util/JwtUtils.java b/jpa-day7/src/main/java/edu/util/JwtUtils.java new file mode 100644 index 0000000..d4454e5 --- /dev/null +++ b/jpa-day7/src/main/java/edu/util/JwtUtils.java @@ -0,0 +1,42 @@ +package edu.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTCreator; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; + +import java.util.Calendar; +import java.util.Map; + +public class JwtUtils { + private static String SECRET = "jpa+token+sejhfncj^%$^%*^&"; + + /** + * 生产token + */ + public static String getToken(Map map) { + JWTCreator.Builder builder = JWT.create(); + //payload + map.forEach((k, v) -> { + builder.withClaim(k, v); + }); + //默认7天过期 + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.DATE, 7); + //指定令牌的过期时间 + builder.withExpiresAt(instance.getTime()); + //签名 + String token = builder.sign(Algorithm.HMAC256(SECRET)); + return token; + } + + /** + * 验证token + */ + public static DecodedJWT verify(String token) { + //如果有任何验证异常,此处都会抛出异常 + DecodedJWT decodedJWT = JWT.require(Algorithm.HMAC256(SECRET)).build().verify(token); + return decodedJWT; + } + +} diff --git a/jpa-day7/src/main/resources/application.yaml b/jpa-day7/src/main/resources/application.yaml new file mode 100644 index 0000000..399cc24 --- /dev/null +++ b/jpa-day7/src/main/resources/application.yaml @@ -0,0 +1,15 @@ +spring: + datasource: + username: root + password: root + url: jdbc:mysql://localhost:3306/jpademo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + + jpa: + hibernate: + ddl-auto: create + show-sql: true + +server: + port: 8081 \ No newline at end of file diff --git a/jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java b/jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java new file mode 100644 index 0000000..3568d14 --- /dev/null +++ b/jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java @@ -0,0 +1,17 @@ +package edu.nwpu; + +import edu.nwpu.service.UserService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class JpaDay7ApplicationTests { + @Autowired + UserService userService; + @Test + void contextLoads() { + userService.addUser("admin","123","344@163.com","admin","admin"); + } + +} -- Gitee From 5523478fe0a7251e29c6ff003939eaddefabbf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=87=86=E9=A3=8E?= <3440433157@qq.com> Date: Sun, 31 Oct 2021 15:00:04 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=20jpa-day7=20?= =?UTF-8?q?=E4=B8=BA=20practice1:2019302650-=E5=85=B0=E5=86=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pom.xml" | 0 .../src/main/java/edu/nwpu/JpaDay7Application.java" | 0 .../src/main/java/edu/nwpu/common/Response.java" | 0 .../src/main/java/edu/nwpu/config/InterceptorConfig.java" | 0 .../src/main/java/edu/nwpu/controller/BookController.java" | 0 .../src/main/java/edu/nwpu/controller/LoginController.java" | 0 .../src/main/java/edu/nwpu/controller/UserController.java" | 0 .../src/main/java/edu/nwpu/dao/BookDao.java" | 0 .../src/main/java/edu/nwpu/dao/RecordDao.java" | 0 .../src/main/java/edu/nwpu/dao/UserDao.java" | 0 .../src/main/java/edu/nwpu/entity/Book.java" | 0 .../src/main/java/edu/nwpu/entity/Record.java" | 0 .../src/main/java/edu/nwpu/entity/User.java" | 0 .../src/main/java/edu/nwpu/interceptor/AuthInterceptor.java" | 0 .../src/main/java/edu/nwpu/interceptor/LoginInteceptor.java" | 0 .../src/main/java/edu/nwpu/service/BookService.java" | 0 .../src/main/java/edu/nwpu/service/UserService.java" | 0 .../src/main/java/edu/nwpu/service/impl/BookServiceImpl.java" | 0 .../src/main/java/edu/nwpu/service/impl/UserServiceImpl.java" | 0 .../src/main/java/edu/nwpu/vo/BookVo.java" | 0 .../src/main/java/edu/nwpu/vo/RecordBookVo.java" | 0 .../src/main/java/edu/nwpu/vo/RecordVo.java" | 0 .../src/main/java/edu/nwpu/vo/ResponseVo.java" | 0 .../src/main/java/edu/nwpu/vo/UserVo.java" | 0 .../src/main/java/edu/util/JwtUtils.java" | 0 .../src/main/resources/application.yaml" | 0 .../src/test/java/edu/nwpu/JpaDay6ApplicationTests.java" | 0 27 files changed, 0 insertions(+), 0 deletions(-) rename jpa-day7/pom.xml => "practice1:2019302650-\345\205\260\345\206\233/pom.xml" (100%) rename jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/JpaDay7Application.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/common/Response.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/common/Response.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/config/InterceptorConfig.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/controller/BookController.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/BookController.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/LoginController.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/controller/UserController.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/UserController.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/BookDao.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/RecordDao.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/UserDao.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/entity/Book.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Book.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/entity/Record.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Record.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/entity/User.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/User.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/service/BookService.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/BookService.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/service/UserService.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/UserService.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/BookVo.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordBookVo.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordVo.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/ResponseVo.java" (100%) rename jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/UserVo.java" (100%) rename jpa-day7/src/main/java/edu/util/JwtUtils.java => "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/util/JwtUtils.java" (100%) rename jpa-day7/src/main/resources/application.yaml => "practice1:2019302650-\345\205\260\345\206\233/src/main/resources/application.yaml" (100%) rename jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java => "practice1:2019302650-\345\205\260\345\206\233/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java" (100%) diff --git a/jpa-day7/pom.xml "b/practice1:2019302650-\345\205\260\345\206\233/pom.xml" similarity index 100% rename from jpa-day7/pom.xml rename to "practice1:2019302650-\345\205\260\345\206\233/pom.xml" diff --git a/jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/JpaDay7Application.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/JpaDay7Application.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/JpaDay7Application.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/common/Response.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/common/Response.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/common/Response.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/common/Response.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/config/InterceptorConfig.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/config/InterceptorConfig.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/config/InterceptorConfig.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/BookController.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/BookController.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/controller/BookController.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/BookController.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/LoginController.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/controller/LoginController.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/LoginController.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/controller/UserController.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/UserController.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/controller/UserController.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/controller/UserController.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/BookDao.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/dao/BookDao.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/BookDao.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/RecordDao.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/dao/RecordDao.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/RecordDao.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/UserDao.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/dao/UserDao.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/dao/UserDao.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/Book.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Book.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/entity/Book.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Book.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/Record.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Record.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/entity/Record.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/Record.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/entity/User.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/User.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/entity/User.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/entity/User.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/AuthInterceptor.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/interceptor/LoginInteceptor.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/service/BookService.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/BookService.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/service/BookService.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/BookService.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/service/UserService.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/UserService.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/service/UserService.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/UserService.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/BookServiceImpl.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/service/impl/UserServiceImpl.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/BookVo.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/vo/BookVo.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/BookVo.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordBookVo.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/vo/RecordBookVo.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordBookVo.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordVo.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/vo/RecordVo.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/RecordVo.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/ResponseVo.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/vo/ResponseVo.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/ResponseVo.java" diff --git a/jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/UserVo.java" similarity index 100% rename from jpa-day7/src/main/java/edu/nwpu/vo/UserVo.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/nwpu/vo/UserVo.java" diff --git a/jpa-day7/src/main/java/edu/util/JwtUtils.java "b/practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/util/JwtUtils.java" similarity index 100% rename from jpa-day7/src/main/java/edu/util/JwtUtils.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/java/edu/util/JwtUtils.java" diff --git a/jpa-day7/src/main/resources/application.yaml "b/practice1:2019302650-\345\205\260\345\206\233/src/main/resources/application.yaml" similarity index 100% rename from jpa-day7/src/main/resources/application.yaml rename to "practice1:2019302650-\345\205\260\345\206\233/src/main/resources/application.yaml" diff --git a/jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java "b/practice1:2019302650-\345\205\260\345\206\233/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java" similarity index 100% rename from jpa-day7/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java rename to "practice1:2019302650-\345\205\260\345\206\233/src/test/java/edu/nwpu/JpaDay6ApplicationTests.java" -- Gitee