diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 0ba92b0..4903cef 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -20,7 +20,7 @@ - + diff --git a/test05/pom.xml b/test05/pom.xml index eedc7fa..e790a29 100644 --- a/test05/pom.xml +++ b/test05/pom.xml @@ -77,6 +77,12 @@ lombok true + + + io.jsonwebtoken + jjwt + 0.12.3 + diff --git a/test05/src/main/java/test05/Test05Application.java b/test05/src/main/java/test05/Test05Application.java index 7a90406..009b481 100644 --- a/test05/src/main/java/test05/Test05Application.java +++ b/test05/src/main/java/test05/Test05Application.java @@ -2,7 +2,9 @@ package test05; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +@ServletComponentScan @SpringBootApplication public class Test05Application { diff --git a/test05/src/main/java/test05/controller/LoginController.java b/test05/src/main/java/test05/controller/LoginController.java new file mode 100644 index 0000000..5299f1c --- /dev/null +++ b/test05/src/main/java/test05/controller/LoginController.java @@ -0,0 +1,36 @@ +package test05.controller; + +import jakarta.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import test05.pojo.Result; +import test05.pojo.User; +import test05.service.UserService; + +@RestController +@RequestMapping("/userAction") +public class LoginController { + private final UserService userService; + @Autowired + public LoginController(UserService userService) { + this.userService = userService; + } + + @CrossOrigin + @RequestMapping("/login") + public Result login(String username, String password, HttpSession session) { + if (session.getAttribute("user") != null) { + return Result.success(session.getAttribute("user")); + }else if (username==null || password==null) { + return Result.error("login fail"); + } + Result res = userService.login(new User(username, password)); + if (res.isSuccess()) { + session.setAttribute("user", res.getData()); + } + return res; + } + +} diff --git a/test05/src/main/java/test05/filter/loginFilter.java b/test05/src/main/java/test05/filter/loginFilter.java new file mode 100644 index 0000000..d21fd80 --- /dev/null +++ b/test05/src/main/java/test05/filter/loginFilter.java @@ -0,0 +1,20 @@ +package test05.filter; + +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; + +import java.io.IOException; +import java.util.Objects; + +@WebFilter("/*Action/*") +public class loginFilter implements Filter { + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + if (Objects.equals(((HttpServletRequest) servletRequest).getRequestURI(), "/userAction/login")) { + filterChain.doFilter(servletRequest, servletResponse); + } + filterChain.doFilter(servletRequest, servletResponse); + } +} diff --git a/test05/src/main/java/test05/mapper/UserMapper.java b/test05/src/main/java/test05/mapper/UserMapper.java index 05833ca..b56eb2e 100644 --- a/test05/src/main/java/test05/mapper/UserMapper.java +++ b/test05/src/main/java/test05/mapper/UserMapper.java @@ -7,7 +7,7 @@ import java.util.List; @Mapper public interface UserMapper { - List selectUser(User user); + List selectUser(User user, int page, int pageSize); User selectUserByName(String username); int insertUser(User user); int deleteUser(User user); diff --git a/test05/src/main/java/test05/pojo/Student.java b/test05/src/main/java/test05/pojo/Student.java index 3f61bf9..ce87ca8 100644 --- a/test05/src/main/java/test05/pojo/Student.java +++ b/test05/src/main/java/test05/pojo/Student.java @@ -10,20 +10,20 @@ import lombok.NonNull; @NoArgsConstructor public class Student { @NonNull - private Integer N_STUDENT_ID=-1; + private Integer id =-1; @NonNull - private String VC_STUDENT_CODE=""; + private String code =""; @NonNull - private String VC_STUDENT_NAME=""; + private String name =""; @NonNull - private Integer N_SEX=-1; + private Integer sex =-1; @NonNull - private Integer N_GRADE=-1; + private Integer grade =-1; @NonNull - private Integer N_MAJOR=-1; + private Integer major =-1; @NonNull - private String VC_DETAIL=""; + private String detail =""; public Student(int id){ - N_STUDENT_ID=id; + this.id =id; } } diff --git a/test05/src/main/java/test05/pojo/User.java b/test05/src/main/java/test05/pojo/User.java index de14c09..c924b46 100644 --- a/test05/src/main/java/test05/pojo/User.java +++ b/test05/src/main/java/test05/pojo/User.java @@ -10,12 +10,16 @@ import lombok.NonNull; @NoArgsConstructor public class User { @NonNull - private Integer N_USER_ID=-1; + private Integer id =-1; @NonNull - private String VC_LOGIN_NAME =""; + private String name =""; @NonNull - private String VC_PASSWORD=""; + private String password =""; public User(int id){ - N_USER_ID = id; + this.id = id; + } + public User(@NonNull String name, @NonNull String password){ + this.name = name; + this.password = password; } } diff --git a/test05/src/main/java/test05/service/UserService.java b/test05/src/main/java/test05/service/UserService.java index 67d8ff5..568d4a4 100644 --- a/test05/src/main/java/test05/service/UserService.java +++ b/test05/src/main/java/test05/service/UserService.java @@ -1,4 +1,13 @@ package test05.service; +import test05.pojo.Result; +import test05.pojo.User; + public interface UserService { + /** + * 用户登录服务 + * @param user 包含用户名和密码用于比对 + * @return 登录结果 + */ + public Result login(User user); } diff --git a/test05/src/main/java/test05/service/impl/CourseServiceImpl.java b/test05/src/main/java/test05/service/impl/CourseServiceImpl.java index 681f4ef..ac645b6 100644 --- a/test05/src/main/java/test05/service/impl/CourseServiceImpl.java +++ b/test05/src/main/java/test05/service/impl/CourseServiceImpl.java @@ -20,7 +20,7 @@ public class CourseServiceImpl implements CourseService { return "do not set N_COURSE_ID"; } if (course.getName().length()<4||course.getName().length()>25){ - return "name too long"; + return "name invalid"; } if (course.getGrade()>3000||course.getGrade()<2000){ return "grade invalid"; diff --git a/test05/src/main/java/test05/service/impl/UserServiceImpl.java b/test05/src/main/java/test05/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..e6272ee --- /dev/null +++ b/test05/src/main/java/test05/service/impl/UserServiceImpl.java @@ -0,0 +1,37 @@ +package test05.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import test05.mapper.UserMapper; +import test05.pojo.Result; +import test05.pojo.User; +import test05.service.UserService; +import test05.utils.JwtUtils; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class UserServiceImpl implements UserService { + private UserMapper userMapper; + @Autowired + public void setUserMapper(UserMapper userMapper) { + this.userMapper = userMapper; + } + + @Override + public Result login(User user) { + User selectUser = userMapper.selectUserByName(user.getName()); + if (selectUser == null) { + return Result.error("user dose not exist"); + } + if (selectUser.getPassword().equals(user.getPassword())) { + Map map = new HashMap(); + map.put("id", selectUser.getId()); + map.put("name", selectUser.getName()); + return Result.success(JwtUtils.getJwt(map)); + }else{ + return Result.error("password incorrect"); + } + } +} diff --git a/test05/src/main/java/test05/utils/JwtUtils.java b/test05/src/main/java/test05/utils/JwtUtils.java new file mode 100644 index 0000000..bd87419 --- /dev/null +++ b/test05/src/main/java/test05/utils/JwtUtils.java @@ -0,0 +1,53 @@ +package test05.utils; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.security.Keys; + +import javax.crypto.SecretKey; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class JwtUtils { + static private final SecretKey KEY=Keys.hmacShaKeyFor("12@529#5e2#54t8r8$0454g9&hj|03nb13df1h1351xY".getBytes()); + // ms s m h d + static private final int[] expireTime = {0,0,0,3,0}; + + static public String getJwt(Map map){ + return Jwts.builder() + // 设置头部信息header + .header() + .add("typ", "JWT") + .add("alg", "HS256") + .and() + // 设置自定义负载信息payload + .claim("data", map) + // 过期日期 + .expiration(getExpireTime()) + // 签名8 + .signWith(KEY) + .compact(); + } + static public void setExpireTime(int ms, int seconds, int minutes, int hour,int day){ + expireTime[0] = ms; + expireTime[1] = seconds; + expireTime[2] = minutes; + expireTime[3] = hour; + expireTime[4] = day; + } + static public Date getExpireTime(){ + return new Date(System.currentTimeMillis() + + (expireTime[0]) + + (expireTime[1] * 1000L) + + (expireTime[2] * 60000L) + + (expireTime[3] * 3600000L) + + (expireTime[4] * 86400000L) + ); + } + static public Map parseJwt(String jwt){ + return Jwts.parser() + .verifyWith(KEY) + .build() + .parseSignedClaims(jwt).getPayload(); + } +} diff --git a/test05/src/main/resources/test05/mapper/CourseMapper.xml b/test05/src/main/resources/test05/mapper/CourseMapper.xml index a48ba70..6edd6e5 100644 --- a/test05/src/main/resources/test05/mapper/CourseMapper.xml +++ b/test05/src/main/resources/test05/mapper/CourseMapper.xml @@ -9,6 +9,7 @@ N_TYPE AS type, F_CREDIT AS credit, N_MAJOR AS major, + N_GRADE AS grade, VC_DETAIL AS detail FROM t_course WHERE #{course.id} in (N_COURSE_ID, -1) @@ -16,19 +17,19 @@ AND #{course.credit} in (F_CREDIT, -1) AND #{course.major} in (N_MAJOR, -1) AND UPPER(VC_COURSE_NAME) LIKE CONCAT('%', UPPER(#{course.name}), '%') - ORDER BY N_COURSE_ID - LIMIT #{page}*#{pageSize},#{pageSize} + ORDER BY N_COURSE_ID DESC + LIMIT (#{page}-1)*#{pageSize},#{pageSize} - + INSERT INTO t_course (VC_COURSE_NAME, N_TYPE, F_CREDIT, N_GRADE, N_MAJOR, VC_DETAIL) VALUES (#{name}, #{type}, #{credit}, #{grade}, #{major}, #{detail}) diff --git a/test05/src/main/resources/test05/mapper/StudentMapper.xml b/test05/src/main/resources/test05/mapper/StudentMapper.xml index 07606d4..f808c37 100644 --- a/test05/src/main/resources/test05/mapper/StudentMapper.xml +++ b/test05/src/main/resources/test05/mapper/StudentMapper.xml @@ -4,37 +4,43 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + INSERT INTO t_student (VC_STUDENT_CODE, VC_STUDENT_NAME, N_SEX, N_GRADE, N_MAJOR, VC_DETAIL) VALUES - (#{VC_STUDENT_CODE},#{VC_STUDENT_NAME},#{N_SEX},#{N_GRADE},#{N_MAJOR},#{VC_DETAIL}); + (#{code},#{name},#{sex},#{grade},#{major},#{detail}); DELETE FROM t_student - WHERE N_STUDENT_ID = #{N_STUDENT_ID}; + WHERE N_STUDENT_ID = #{id}; UPDATE t_student - SET VC_STUDENT_CODE=#{VC_STUDENT_CODE}, - VC_STUDENT_NAME=#{VC_STUDENT_NAME}, - N_SEX=#{N_SEX}, - N_GRADE=#{N_GRADE}, - N_MAJOR=#{N_MAJOR}, - VC_DETAIL=#{VC_DETAIL} - WHERE N_STUDENT_ID=#{N_STUDENT_ID}; + SET VC_STUDENT_CODE=#{code}, + VC_STUDENT_NAME=#{name}, + N_SEX=#{sex}, + N_GRADE=#{grade}, + N_MAJOR=#{major}, + VC_DETAIL=#{detail} + WHERE N_STUDENT_ID=#{id}; \ No newline at end of file diff --git a/test05/src/main/resources/test05/mapper/UserMapper.xml b/test05/src/main/resources/test05/mapper/UserMapper.xml index 8fe7102..317475f 100644 --- a/test05/src/main/resources/test05/mapper/UserMapper.xml +++ b/test05/src/main/resources/test05/mapper/UserMapper.xml @@ -4,32 +4,38 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + INSERT INTO t_user (VC_LOGIN_NAME, VC_PASSWORD) VALUES - (#{VC_LOGIN_NAME}, #{VC_PASSWORD}) + (#{name}, #{password}) UPDATE t_user - SET VC_PASSWORD=#{VC_PASSWORD}, - VC_LOGIN_NAME=#{VC_LOGIN_NAME} - WHERE N_USER_ID = #{N_USER_ID}; + SET VC_PASSWORD=#{password}, + VC_LOGIN_NAME=#{name} + WHERE N_USER_ID = #{id}; DELETE FROM t_user - WHERE N_USER_ID = #{N_USER_ID} + WHERE N_USER_ID = #{id} diff --git a/test05/src/test/java/test05/Test05ApplicationTests.java b/test05/src/test/java/test05/Test05ApplicationTests.java index e501fe7..62b6639 100644 --- a/test05/src/test/java/test05/Test05ApplicationTests.java +++ b/test05/src/test/java/test05/Test05ApplicationTests.java @@ -1,13 +1,19 @@ package test05; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.security.Keys; import org.junit.jupiter.api.Test; import org.opentest4j.TestAbortedException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import test05.mapper.*; import test05.pojo.*; +import test05.utils.JwtUtils; + +import java.util.*; -import java.util.List; @SpringBootTest class Test05ApplicationTests { @@ -23,7 +29,7 @@ class Test05ApplicationTests { UserMapper userMapper; @Test - public void courseMapperTest(){ + public void courseMapperTest() { Course course = new Course(); course.setName("测试课程"); @@ -36,7 +42,7 @@ class Test05ApplicationTests { courseMapper.deleteCourse(course); } courseMapper.insertCourse(course); - if (course.getId()==-1){ + if (course.getId() == -1) { System.out.println("课程添加出阿信错误"); throw new TestAbortedException(); } @@ -58,50 +64,17 @@ class Test05ApplicationTests { } @Test - public void scoreSelectTest(){ - Score score = new Score(); - List result = scoreMapper.selectScore(score); - System.out.println(result); - } - - @Test - public void scoreInsertTest(){ - Score score = new Score(); - score.setN_COURSE_ID(22); - score.setN_STUDENT_ID(22); - score.setF_SCORE(1.0F); - scoreMapper.insertScore(score); - } - - @Test - public void scoreUpdateTest(){ - Score score = new Score(); - score.setN_COURSE_ID(22); - score.setN_STUDENT_ID(22); - score.setF_SCORE(2.0F); - scoreMapper.updateScore(score); - } - - @Test - public void scoreDeleteTest(){ - Score score = new Score(); - score.setN_COURSE_ID(22); - score.setN_STUDENT_ID(22); - scoreMapper.deleteScore(score); - } - - @Test - public void studentMapperTest(){ + public void studentMapperTest() { Student student = new Student(); - student.setVC_STUDENT_CODE("2020202"); - student.setN_MAJOR(2); - student.setVC_STUDENT_NAME("测试学生"); - student.setN_SEX(1); - student.setN_GRADE(2022); + student.setCode("2020202"); + student.setMajor(2); + student.setName("测试学生"); + student.setSex(1); + student.setGrade(2022); //添加学生 studentMapper.insertStudent(student); - System.out.println(student.getN_STUDENT_ID()); - if (student.getN_STUDENT_ID()==-1) { + System.out.println(student.getId()); + if (student.getId() == -1) { System.out.println("学生信息添加出现错误"); throw new TestAbortedException(); } @@ -113,14 +86,14 @@ class Test05ApplicationTests { } System.out.println(selectResult); //修改学生 - student.setN_GRADE(2023); + student.setGrade(2023); studentMapper.updateStudent(student); selectResult = studentMapper.selectStudent(student, 0, 10); if (selectResult.size() != 1) { System.out.println("学生信息查询出现错误"); throw new TestAbortedException(); } - if (selectResult.getFirst().getN_GRADE() != 2023) { + if (selectResult.getFirst().getGrade() != 2023) { System.out.println("学生信息修改出现错误"); throw new TestAbortedException(); } @@ -133,7 +106,7 @@ class Test05ApplicationTests { } @Test - public void teacherMapperTest(){ + public void teacherMapperTest() { Teacher teacher = new Teacher(); teacher.setVC_TEACHER_NAME("测试老师"); teacher.setN_EDUC(2); @@ -149,7 +122,7 @@ class Test05ApplicationTests { } //查询老师 List selectResult = teacherMapper.selectTeacher(new Teacher()); - if (selectResult.isEmpty()){ + if (selectResult.isEmpty()) { System.out.println("查询老师信息出现错误"); throw new TestAbortedException(); } @@ -158,65 +131,76 @@ class Test05ApplicationTests { //修改老师 teacherMapper.updateTeacher(teacher); selectResult = teacherMapper.selectTeacher(teacher); - if (selectResult.size() != 1){ + if (selectResult.size() != 1) { System.out.println("查询老师信息出现错误"); throw new TestAbortedException(); } - if (selectResult.getFirst().getN_SEX()!=0) { + if (selectResult.getFirst().getN_SEX() != 0) { System.out.println("老师信息修改出现错误"); throw new TestAbortedException(); } //删除老师 teacherMapper.deleteTeacher(teacher); selectResult = teacherMapper.selectTeacher(teacher); - if (!selectResult.isEmpty()){ + if (!selectResult.isEmpty()) { System.out.println("老师信息删除出现错误"); } } @Test - public void userMapperTest(){ + public void userMapperTest() { User user; user = userMapper.selectUserByName("测试用户"); if (user == null) { user = new User(); - }else{ + } else { userMapper.deleteUser(user); } - user.setVC_PASSWORD("123456"); - user.setVC_LOGIN_NAME("测试用户"); + user.setPassword("123456"); + user.setName("测试用户"); userMapper.insertUser(user); - if (user.getN_USER_ID()==-1) { + if (user.getId() == -1) { System.out.println("添加用户出现错误"); throw new TestAbortedException(); } - List selectResult = userMapper.selectUser(new User()); - if (selectResult.isEmpty()){ + List selectResult = userMapper.selectUser(new User(), 0, 10); + if (selectResult.isEmpty()) { System.out.println("查询用户出现错误"); throw new TestAbortedException(); } System.out.println(selectResult); - user.setVC_PASSWORD("654321"); + user.setPassword("654321"); userMapper.updateUser(user); - selectResult = userMapper.selectUser(user); - if (selectResult.size()!=1){ + selectResult = userMapper.selectUser(user, 0, 10); + if (selectResult.size() != 1) { System.out.println("查询用户失败"); throw new TestAbortedException(); } - if (!selectResult.getFirst().getVC_PASSWORD().equals(user.getVC_PASSWORD())) { + if (!selectResult.getFirst().getPassword().equals(user.getPassword())) { System.out.println("修改用户出现错误"); throw new TestAbortedException(); } - User selectUser = userMapper.selectUserByName(user.getVC_LOGIN_NAME()); - if (selectUser==null){ + User selectUser = userMapper.selectUserByName(user.getName()); + if (selectUser == null) { System.out.println("用户定位失败"); throw new TestAbortedException(); } userMapper.deleteUser(user); - selectResult = userMapper.selectUser(user); - if (!selectResult.isEmpty()){ + selectResult = userMapper.selectUser(user, 0, 10); + if (!selectResult.isEmpty()) { System.out.println("删除用户失败"); throw new TestAbortedException(); } } + + @Test + public void genJwtTest(){ + Map map = new HashMap(); + map.put("id", "1"); + map.put("name", "tom"); + String jwt = JwtUtils.getJwt(map); + System.out.println(jwt); + Map result = JwtUtils.parseJwt(jwt); + System.out.println(result); + } }