diff --git a/.idea/misc.xml b/.idea/misc.xml index 79f13d2..9134c12 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -9,5 +9,5 @@ - + \ No newline at end of file diff --git a/common/common-util/pom.xml b/common/common-util/pom.xml index 9d7061a..156fad3 100644 --- a/common/common-util/pom.xml +++ b/common/common-util/pom.xml @@ -19,12 +19,13 @@ - org.springframework.boot - spring-boot-starter-web + com.atguigu + model + 1.0-SNAPSHOT - io.jsonwebtoken - jjwt + org.springframework.boot + spring-boot-starter-web org.projectlombok @@ -35,10 +36,9 @@ fastjson - com.atguigu - model - 1.0-SNAPSHOT - compile + javax.xml.bind + jaxb-api + 2.1 diff --git a/common/common-util/src/main/java/com/atguigu/common/utlis/JwtHelper.java b/common/common-util/src/main/java/com/atguigu/common/utlis/JwtHelper.java new file mode 100644 index 0000000..7f3f888 --- /dev/null +++ b/common/common-util/src/main/java/com/atguigu/common/utlis/JwtHelper.java @@ -0,0 +1,51 @@ +package com.atguigu.common.utlis; + +import io.jsonwebtoken.*; +import org.springframework.util.StringUtils; + +import java.util.Date; + +public class JwtHelper { + private static final long tokenExpiration = 365L * 24 * 60 * 60 * 1000; + private static final String tokenSignKey = "guigu-OA"; + + public static String createToken(Long userId, String userName) { + return Jwts.builder() + .setSubject("OA-USER") + .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) + .claim("userId", userId) + .claim("userName", userName) + .signWith(SignatureAlgorithm.HS256, tokenSignKey) + .compressWith(CompressionCodecs.GZIP) + .compact(); + } + + public static Long getUserId(String token) { + if (StringUtils.isEmpty(token)) return null; + + Jws claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + Integer userId = (Integer) claims.get("userId"); + return userId.longValue(); + // return 1L; + } + + public static String getUserName(String token) { + if (StringUtils.isEmpty(token)) return ""; + + Jws claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + return (String) claims.get("userName"); + } + + public static void removeToken(String token) { + // jwttoken无需删除,客户端扔掉即可。 + } + + public static void main(String[] args) { + String token = JwtHelper.createToken(7L, "admin"); + System.out.println(token); + System.out.println(JwtHelper.getUserId(token)); + System.out.println(JwtHelper.getUserName(token)); + } +} \ No newline at end of file diff --git a/common/common-util/target/classes/com/atguigu/common/result/Result.class b/common/common-util/target/classes/com/atguigu/common/result/Result.class index c797a58..0f9aaa3 100644 Binary files a/common/common-util/target/classes/com/atguigu/common/result/Result.class and b/common/common-util/target/classes/com/atguigu/common/result/Result.class differ diff --git a/common/common-util/target/classes/com/atguigu/common/result/ResultCodeEnum.class b/common/common-util/target/classes/com/atguigu/common/result/ResultCodeEnum.class index f4de3e5..3ecfd45 100644 Binary files a/common/common-util/target/classes/com/atguigu/common/result/ResultCodeEnum.class and b/common/common-util/target/classes/com/atguigu/common/result/ResultCodeEnum.class differ diff --git a/common/pom.xml b/common/pom.xml index 884656b..3f21a62 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -1,4 +1,4 @@ - 4.0.0 @@ -21,6 +21,9 @@ - + + io.jsonwebtoken + jjwt + diff --git a/model/src/main/java/com/atguigu/model/system/Login.java b/model/src/main/java/com/atguigu/model/system/Login.java new file mode 100644 index 0000000..2c4a60c --- /dev/null +++ b/model/src/main/java/com/atguigu/model/system/Login.java @@ -0,0 +1,14 @@ +package com.atguigu.model.system; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Login { + private String token; +} diff --git a/service-oa/src/main/java/com/atguigu/auth/controller/IndexController.java b/service-oa/src/main/java/com/atguigu/auth/controller/IndexController.java index 3384d05..8e3d720 100644 --- a/service-oa/src/main/java/com/atguigu/auth/controller/IndexController.java +++ b/service-oa/src/main/java/com/atguigu/auth/controller/IndexController.java @@ -1,12 +1,13 @@ package com.atguigu.auth.controller; +import com.atguigu.auth.service.SysUserService; import com.atguigu.common.result.Result; +import com.atguigu.model.system.Login; +import com.atguigu.vo.system.LoginVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @@ -20,13 +21,14 @@ import java.util.Map; @RestController @RequestMapping("/admin/system/index") public class IndexController { + @Autowired + private SysUserService sysUserService; @Operation(summary = "登录", description = "登录") @PostMapping("login") - public Result> login() { - Map map = new HashMap<>(); - map.put("token", "admin"); - return Result.success(map); + public Result login(@RequestBody LoginVo loginVo) { + Login login = sysUserService.login(loginVo); + return Result.success(login); } @Operation(summary = "获取用户信息", description = "获取用户信息") diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java index 5146d21..1e1d79c 100644 --- a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java +++ b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java @@ -1,6 +1,8 @@ package com.atguigu.auth.service; +import com.atguigu.model.system.Login; import com.atguigu.model.system.SysUser; +import com.atguigu.vo.system.LoginVo; import com.atguigu.vo.system.SysUserQueryVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -32,4 +34,12 @@ public interface SysUserService extends IService { * @param status 修改的状态 */ void updateStatus(Long id, Long status); + + /** + * 登录 + * + * @param vo 登录条件 + * @return 返回token + */ + Login login(LoginVo vo); } diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java index 2fab02e..503fc43 100644 --- a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java +++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java @@ -2,13 +2,19 @@ package com.atguigu.auth.service.impl; import com.atguigu.auth.mapper.SysUserMapper; import com.atguigu.auth.service.SysUserService; +import com.atguigu.common.utlis.JwtHelper; +import com.atguigu.constant.MessageConstant; +import com.atguigu.exception.BunnyException; +import com.atguigu.model.system.Login; import com.atguigu.model.system.SysUser; +import com.atguigu.vo.system.LoginVo; import com.atguigu.vo.system.SysUserQueryVo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; /** @@ -66,4 +72,39 @@ public class SysUserServiceImpl extends ServiceImpl impl // 更新用户状态 updateById(sysUser); } + + /** + * 登录 + * + * @param vo 登录条件 + * @return 返回token + */ + @Override + public Login login(LoginVo vo) { + String username = vo.getUsername(); + String password = vo.getPassword(); + // 查询用户信息 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysUser::getUsername, username); + SysUser sysUser = getOne(wrapper); + + // 用户是否存在 + if (sysUser == null) { + throw new BunnyException(MessageConstant.ACCOUNT_NOT_FOUND); + } + + // 判断是否被禁用 + if (sysUser.getStatus() == 0) { + throw new BunnyException(MessageConstant.ACCOUNT_LOCKED); + } + + // 判断密码 + String md5DigestAsHexPassword = DigestUtils.md5DigestAsHex(password.getBytes()); + if (!md5DigestAsHexPassword.equals(password)) { + throw new BunnyException(MessageConstant.PASSWORD_ERROR); + } + // 添加token + String token = JwtHelper.createToken(sysUser.getId(), sysUser.getUsername()); + return Login.builder().token(token).build(); + } }