diff --git a/pom.xml b/pom.xml index 3257e75..51dda5f 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,12 @@ org.springframework.boot spring-boot-starter-data-redis + + + io.jsonwebtoken + jjwt + 0.9.1 + org.springframework.boot diff --git a/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java b/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java index 7402ec0..74d97bf 100644 --- a/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java +++ b/src/main/java/org/hlrj/duobao_demo/DuobaoDemoApplication.java @@ -4,10 +4,12 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching +@ServletComponentScan @MapperScan("org.hlrj.duobao_demo.mapper") public class DuobaoDemoApplication { diff --git a/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java b/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java index 808d10f..0b67795 100644 --- a/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java +++ b/src/main/java/org/hlrj/duobao_demo/controller/LoginController.java @@ -3,12 +3,17 @@ package org.hlrj.duobao_demo.controller; import lombok.extern.slf4j.Slf4j; import org.hlrj.duobao_demo.entity.User; import org.hlrj.duobao_demo.service.IUserService; +import org.hlrj.duobao_demo.tool.JwtUtils; import org.hlrj.duobao_demo.tool.Result; import org.springframework.beans.factory.annotation.Autowired; 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; + /** * @program: duobao_demo * @ClassName LoginController @@ -29,9 +34,14 @@ public class LoginController { log.info("登录操作:{}",user); User user1 = userService.login(user); if (user1 != null) { - return Result.error("用户名或者密码错误"); - }else { - return Result.success("登录成功"); + Map map = new HashMap<>(); + map.put("userid",user1.getUserid()); + map.put("username",user1.getUsername()); + map.put("createTime",user1.getCreateTime()); + //生成jwt令牌 + String jwt = JwtUtils.generateJwt(map); + return Result.success(jwt); } + return Result.error("用户名或者密码错误"); } } diff --git a/src/main/java/org/hlrj/duobao_demo/entity/User.java b/src/main/java/org/hlrj/duobao_demo/entity/User.java index ffbc199..6022957 100644 --- a/src/main/java/org/hlrj/duobao_demo/entity/User.java +++ b/src/main/java/org/hlrj/duobao_demo/entity/User.java @@ -39,7 +39,7 @@ public class User implements Serializable { private String password; @ApiModelProperty(value = "创建时间") - private LocalDateTime createTime; + private java.util.Date createTime; } diff --git a/src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java b/src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java new file mode 100644 index 0000000..1ffe759 --- /dev/null +++ b/src/main/java/org/hlrj/duobao_demo/tool/DomoFilter.java @@ -0,0 +1,34 @@ +package org.hlrj.duobao_demo.tool; + + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +/** + * @program: duobao_demo + * @ClassName DomoFilter + * @description: + * @author:liuyusong + * @create: 2025−04-14 15:43 + * @Version 1.0 + **/ +@WebFilter(urlPatterns="/*") +public class DomoFilter implements Filter { + + @Override//初始化方法,只调用一次 + public void init(FilterConfig filterConfig) throws ServletException { + System.out.println("init,初始化方法执行了"); + } + + @Override//拦截到请求之后调用,调用多次 + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + filterChain.doFilter(servletRequest, servletResponse); + + } + + @Override//销毁方法,只能调用一次 + public void destroy() { + System.out.println("destroy 销毁方法执行了"); + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java b/src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java new file mode 100644 index 0000000..9404196 --- /dev/null +++ b/src/main/java/org/hlrj/duobao_demo/tool/JwtUtils.java @@ -0,0 +1,46 @@ +package org.hlrj.duobao_demo.tool; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Map; + +/** + * @program: duobao_demo + * @ClassName JwtUtils + * @description: + * @author:liuyusong + * @create: 2025−04-14 14:38 + * @Version 1.0 + **/ + +public class JwtUtils { + + private static String singKey="hongli";//签名密钥 + private static Long expire = 30*60*1000L;//设置过期时间为半小时 + + /** + * 生成JWT令牌 + * @param claims + * @return + */ + public static String generateJwt(Map claims){ + String jwt = Jwts.builder() + .addClaims(claims) + .signWith(SignatureAlgorithm.HS256,singKey) + .setExpiration(new Date(System.currentTimeMillis()+expire)) + .compact(); + return jwt; + } + + public static Claims parseJwt(String jwt){ + Claims claims = Jwts.parser() + .setSigningKey(singKey) + .parseClaimsJws(jwt) + .getBody(); + return claims; + } +} diff --git a/src/main/java/org/hlrj/duobao_demo/tool/Result.java b/src/main/java/org/hlrj/duobao_demo/tool/Result.java index 234d81e..f783267 100644 --- a/src/main/java/org/hlrj/duobao_demo/tool/Result.java +++ b/src/main/java/org/hlrj/duobao_demo/tool/Result.java @@ -29,7 +29,7 @@ public class Result { return new Result(200, "success", data); } public static Result success(String msg) { - return new Result(400,"msg",null); + return new Result(200,"msg",msg); } public static Result error(String msg) {return new Result(400,"msg",msg);} } diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 502e50a..251100f 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -16,7 +16,7 @@ password, createTime FROM - users + user WHERE username = #{username} AND diff --git a/src/test/java/com/example/demo/Demo2ApplicationTests.java b/src/test/java/com/example/demo/Demo2ApplicationTests.java deleted file mode 100644 index 16686fa..0000000 --- a/src/test/java/com/example/demo/Demo2ApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class Demo2ApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java b/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java index 03a9a9a..16c1e33 100644 --- a/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java +++ b/src/test/java/org/hlrj/duobao_demo/DuobaoDemoApplicationTests.java @@ -1,13 +1,33 @@ package org.hlrj.duobao_demo; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + @SpringBootTest class DuobaoDemoApplicationTests { @Test void contextLoads() { } + /* @Test + public void testGenJwt(){ + Map map=new HashMap<>(); + map.put("id",1); + map.put("name","liuyusong"); + + String jwt = Jwts.builder() + .signWith(SignatureAlgorithm.HS256,"hongli")//签名算法 + .setClaims(map)//自定义内容(有效载荷) + .setExpiration(new Date(System.currentTimeMillis()+3600*1000))//设置有效期为一个小时 + .compact(); + System.out.println(jwt); + }*/ + }