feat(新增): 🚀 登录
This commit is contained in:
parent
8597367453
commit
2aaba301d9
|
@ -9,5 +9,5 @@
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
|
||||||
</project>
|
</project>
|
|
@ -19,12 +19,13 @@
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>com.atguigu</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>model</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>jjwt</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
|
@ -35,10 +36,9 @@
|
||||||
<artifactId>fastjson</artifactId>
|
<artifactId>fastjson</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.atguigu</groupId>
|
<groupId>javax.xml.bind</groupId>
|
||||||
<artifactId>model</artifactId>
|
<artifactId>jaxb-api</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>2.1</version>
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -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<Claims> 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<Claims> 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));
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
|
@ -21,6 +21,9 @@
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -1,12 +1,13 @@
|
||||||
package com.atguigu.auth.controller;
|
package com.atguigu.auth.controller;
|
||||||
|
|
||||||
|
import com.atguigu.auth.service.SysUserService;
|
||||||
import com.atguigu.common.result.Result;
|
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.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -20,13 +21,14 @@ import java.util.Map;
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/admin/system/index")
|
@RequestMapping("/admin/system/index")
|
||||||
public class IndexController {
|
public class IndexController {
|
||||||
|
@Autowired
|
||||||
|
private SysUserService sysUserService;
|
||||||
|
|
||||||
@Operation(summary = "登录", description = "登录")
|
@Operation(summary = "登录", description = "登录")
|
||||||
@PostMapping("login")
|
@PostMapping("login")
|
||||||
public Result<Map<String, Object>> login() {
|
public Result<Login> login(@RequestBody LoginVo loginVo) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Login login = sysUserService.login(loginVo);
|
||||||
map.put("token", "admin");
|
return Result.success(login);
|
||||||
return Result.success(map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "获取用户信息", description = "获取用户信息")
|
@Operation(summary = "获取用户信息", description = "获取用户信息")
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package com.atguigu.auth.service;
|
package com.atguigu.auth.service;
|
||||||
|
|
||||||
|
import com.atguigu.model.system.Login;
|
||||||
import com.atguigu.model.system.SysUser;
|
import com.atguigu.model.system.SysUser;
|
||||||
|
import com.atguigu.vo.system.LoginVo;
|
||||||
import com.atguigu.vo.system.SysUserQueryVo;
|
import com.atguigu.vo.system.SysUserQueryVo;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
@ -32,4 +34,12 @@ public interface SysUserService extends IService<SysUser> {
|
||||||
* @param status 修改的状态
|
* @param status 修改的状态
|
||||||
*/
|
*/
|
||||||
void updateStatus(Long id, Long status);
|
void updateStatus(Long id, Long status);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
*
|
||||||
|
* @param vo 登录条件
|
||||||
|
* @return 返回token
|
||||||
|
*/
|
||||||
|
Login login(LoginVo vo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,19 @@ package com.atguigu.auth.service.impl;
|
||||||
|
|
||||||
import com.atguigu.auth.mapper.SysUserMapper;
|
import com.atguigu.auth.mapper.SysUserMapper;
|
||||||
import com.atguigu.auth.service.SysUserService;
|
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.model.system.SysUser;
|
||||||
|
import com.atguigu.vo.system.LoginVo;
|
||||||
import com.atguigu.vo.system.SysUserQueryVo;
|
import com.atguigu.vo.system.SysUserQueryVo;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.DigestUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,4 +72,39 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||||
// 更新用户状态
|
// 更新用户状态
|
||||||
updateById(sysUser);
|
updateById(sysUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
*
|
||||||
|
* @param vo 登录条件
|
||||||
|
* @return 返回token
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Login login(LoginVo vo) {
|
||||||
|
String username = vo.getUsername();
|
||||||
|
String password = vo.getPassword();
|
||||||
|
// 查询用户信息
|
||||||
|
LambdaQueryWrapper<SysUser> 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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue