Skip to content

Commit 8589de9

Browse files
committed
feat: add login API
1 parent 48bd48b commit 8589de9

File tree

6 files changed

+133
-107
lines changed

6 files changed

+133
-107
lines changed

base/src/main/java/com/tinyengine/it/login/controller/LoginController.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.tinyengine.it.login.model.SSOTicket;
2323
import com.tinyengine.it.login.model.ValidationResult;
2424
import com.tinyengine.it.login.service.ConfigurablePasswordValidator;
25+
import com.tinyengine.it.login.service.LoginService;
2526
import com.tinyengine.it.model.entity.App;
2627
import com.tinyengine.it.model.entity.User;
2728
import com.tinyengine.it.service.app.UserService;
@@ -61,6 +62,9 @@ public class LoginController {
6162
@Autowired
6263
private UserService userService;
6364

65+
@Autowired
66+
private LoginService loginService;
67+
6468
@Autowired
6569
private JwtUtil jwtUtil;
6670

@@ -93,7 +97,7 @@ public Result createUser(@Valid @RequestBody User user) throws Exception {
9397
PasswordResult password = SM3PasswordUtil.createPassword(user.getPassword());
9498
user.setPassword(password.getPasswordHash());
9599
user.setSalt(password.getSalt());
96-
User userResult = userService.createUser(user);
100+
User userResult = loginService.createUser(user);
97101
return Result.success(userResult);
98102
}
99103

@@ -167,7 +171,7 @@ public Result forgotPassword(@RequestBody User user) throws Exception {
167171
PasswordResult password = SM3PasswordUtil.createPassword(user.getPassword());
168172
user.setPassword(password.getPasswordHash());
169173
user.setSalt(password.getSalt());
170-
return userService.forgotPassword(user);
174+
return loginService.forgotPassword(user);
171175
}
172176

173177
/**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.tinyengine.it.login.service;
2+
3+
import com.tinyengine.it.common.base.Result;
4+
import com.tinyengine.it.model.entity.User;
5+
6+
public interface LoginService {
7+
/**
8+
* 新增表t_user数据
9+
*
10+
* @param user the user
11+
* @return the user
12+
*/
13+
User createUser(User user) throws Exception;
14+
15+
/**
16+
* 忘记密码
17+
*
18+
* @param user the user
19+
* @return the Result
20+
*/
21+
Result forgotPassword(User user) throws Exception;
22+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.tinyengine.it.login.service.impl;
2+
3+
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4+
import com.tinyengine.it.common.base.Result;
5+
import com.tinyengine.it.common.exception.ExceptionEnum;
6+
import com.tinyengine.it.common.exception.ServiceException;
7+
import com.tinyengine.it.login.service.LoginService;
8+
import com.tinyengine.it.mapper.UserMapper;
9+
import com.tinyengine.it.model.entity.User;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.security.KeyPair;
14+
import java.security.PrivateKey;
15+
import java.security.PublicKey;
16+
import java.util.Base64;
17+
import java.util.List;
18+
19+
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.decrypt;
20+
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.encrypt;
21+
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.generateSM2KeyPair;
22+
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.getPrivateKeyFromBase64;
23+
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.getPublicKeyFromBase64;
24+
25+
@Service
26+
public class LoginServiceImpl extends ServiceImpl<UserMapper, User> implements LoginService {
27+
/**
28+
* 新增表t_user数据
29+
*
30+
* @param user user
31+
* @return execute success data number
32+
*/
33+
@Override
34+
public User createUser(User user) throws Exception {
35+
User userParam = new User();
36+
userParam.setUsername(user.getUsername());
37+
List<User> users = baseMapper.queryUserByCondition(userParam);
38+
if (!users.isEmpty()) {
39+
throw new ServiceException(ExceptionEnum.CM003.getResultCode(),
40+
ExceptionEnum.CM003.getResultMsg());
41+
}
42+
KeyPair keyPair = generateSM2KeyPair();
43+
PublicKey publicKey = keyPair.getPublic();
44+
PrivateKey privateKey = keyPair.getPrivate();
45+
String cipherText = encrypt(user.getSalt(), publicKey);
46+
String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKey.getEncoded());
47+
String privateKeyBase64 = Base64.getEncoder().encodeToString(privateKey.getEncoded());
48+
user.setSalt(cipherText);
49+
user.setPublicKey(publicKeyBase64);
50+
user.setPrivateKey(privateKeyBase64);
51+
baseMapper.createUser(user);
52+
User result = baseMapper.queryUserById(user.getId());
53+
result.setPrivateKey(null);
54+
return result;
55+
}
56+
57+
/**
58+
* 忘记密码
59+
*
60+
* @param user the user
61+
* @return the user
62+
*/
63+
@Override
64+
public Result forgotPassword(User user) throws Exception {
65+
User userParam = new User();
66+
userParam.setUsername(user.getUsername());
67+
List<User> users = baseMapper.queryUserByCondition(userParam);
68+
if (users.isEmpty()) {
69+
Result.failed(ExceptionEnum.CM002);
70+
}
71+
User userResult = users.get(0);
72+
PublicKey publicKey = getPublicKeyFromBase64(user.getPublicKey());
73+
PrivateKey privateKey = getPrivateKeyFromBase64(userResult.getPrivateKey());
74+
// 验证publickey
75+
if (!validatorPublicKey(userResult.getSalt(), publicKey, privateKey)) {
76+
return Result.failed(ExceptionEnum.CM335);
77+
}
78+
String cipherText = encrypt(user.getSalt(), publicKey);
79+
user.setSalt(cipherText);
80+
user.setId(userResult.getId());
81+
baseMapper.updateUserById(user);
82+
User result = baseMapper.queryUserById(user.getId());
83+
result.setPrivateKey(null);
84+
if (result.getSalt().isEmpty()) {
85+
return Result.failed(ExceptionEnum.CM335);
86+
}
87+
return Result.success(ExceptionEnum.CM334.getResultCode(), ExceptionEnum.CM334.getResultMsg());
88+
}
89+
90+
private boolean validatorPublicKey(String salt, PublicKey publicKey, PrivateKey privateKey) throws Exception {
91+
String plainSalt = decrypt(salt, privateKey);
92+
String cipherSalt = encrypt(plainSalt, publicKey);
93+
String decryptSalt = decrypt(cipherSalt, privateKey);
94+
if (plainSalt.equals(decryptSalt)) {
95+
return true;
96+
}
97+
return false;
98+
}
99+
}

base/src/main/java/com/tinyengine/it/service/app/UserService.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
package com.tinyengine.it.service.app;
1414

1515
import com.baomidou.mybatisplus.extension.service.IService;
16-
import com.tinyengine.it.common.base.Result;
1716
import com.tinyengine.it.model.entity.User;
1817

1918
import java.util.List;
@@ -62,20 +61,4 @@ public interface UserService extends IService<User> {
6261
* @return the integer
6362
*/
6463
Integer updateUserById(User user);
65-
66-
/**
67-
* 新增表t_user数据
68-
*
69-
* @param user the user
70-
* @return the user
71-
*/
72-
User createUser(User user) throws Exception;
73-
74-
/**
75-
* 忘记密码
76-
*
77-
* @param user the user
78-
* @return the Result
79-
*/
80-
Result forgotPassword(User user) throws Exception;
8164
}

base/src/main/java/com/tinyengine/it/service/app/impl/UserServiceImpl.java

Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,16 @@
1313
package com.tinyengine.it.service.app.impl;
1414

1515
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
16-
import com.tinyengine.it.common.base.Result;
17-
import com.tinyengine.it.common.exception.ExceptionEnum;
18-
import com.tinyengine.it.common.exception.ServiceException;
1916
import com.tinyengine.it.mapper.UserMapper;
2017
import com.tinyengine.it.model.entity.User;
2118
import com.tinyengine.it.service.app.UserService;
2219

2320
import lombok.extern.slf4j.Slf4j;
2421

2522
import org.springframework.stereotype.Service;
26-
27-
import java.security.KeyPair;
28-
import java.security.PrivateKey;
29-
import java.security.PublicKey;
30-
import java.util.Base64;
23+
;
3124
import java.util.List;
3225

33-
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.decrypt;
34-
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.encrypt;
35-
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.generateSM2KeyPair;
36-
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.getPrivateKeyFromBase64;
37-
import static com.tinyengine.it.login.Utils.SM2EncryptionUtil.getPublicKeyFromBase64;
38-
3926
/**
4027
* The type User service.
4128
*
@@ -97,77 +84,4 @@ public Integer deleteUserById(String id) {
9784
public Integer updateUserById(User user) {
9885
return baseMapper.updateUserById(user);
9986
}
100-
101-
/**
102-
* 新增表t_user数据
103-
*
104-
* @param user user
105-
* @return execute success data number
106-
*/
107-
@Override
108-
public User createUser(User user) throws Exception {
109-
User userParam = new User();
110-
userParam.setUsername(user.getUsername());
111-
List<User> users = baseMapper.queryUserByCondition(userParam);
112-
if (!users.isEmpty()) {
113-
throw new ServiceException(ExceptionEnum.CM003.getResultCode(),
114-
ExceptionEnum.CM003.getResultMsg());
115-
}
116-
KeyPair keyPair = generateSM2KeyPair();
117-
PublicKey publicKey = keyPair.getPublic();
118-
PrivateKey privateKey = keyPair.getPrivate();
119-
String cipherText = encrypt(user.getSalt(), publicKey);
120-
String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKey.getEncoded());
121-
String privateKeyBase64 = Base64.getEncoder().encodeToString(privateKey.getEncoded());
122-
user.setSalt(cipherText);
123-
user.setPublicKey(publicKeyBase64);
124-
user.setPrivateKey(privateKeyBase64);
125-
baseMapper.createUser(user);
126-
User result = baseMapper.queryUserById(user.getId());
127-
result.setPrivateKey(null);
128-
return result;
129-
}
130-
131-
/**
132-
* 忘记密码
133-
*
134-
* @param user the user
135-
* @return the user
136-
*/
137-
@Override
138-
public Result forgotPassword(User user) throws Exception {
139-
User userParam = new User();
140-
userParam.setUsername(user.getUsername());
141-
List<User> users = baseMapper.queryUserByCondition(userParam);
142-
if (users.isEmpty()) {
143-
Result.failed(ExceptionEnum.CM002);
144-
}
145-
User userResult = users.get(0);
146-
PublicKey publicKey = getPublicKeyFromBase64(user.getPublicKey());
147-
PrivateKey privateKey = getPrivateKeyFromBase64(userResult.getPrivateKey());
148-
// 验证publickey
149-
if (!validatorPublicKey(userResult.getSalt(), publicKey, privateKey)) {
150-
return Result.failed(ExceptionEnum.CM335);
151-
}
152-
String cipherText = encrypt(user.getSalt(), publicKey);
153-
user.setSalt(cipherText);
154-
user.setId(userResult.getId());
155-
baseMapper.updateUserById(user);
156-
User result = baseMapper.queryUserById(user.getId());
157-
result.setPrivateKey(null);
158-
if (result.getSalt().isEmpty()) {
159-
return Result.failed(ExceptionEnum.CM335);
160-
}
161-
return Result.success(ExceptionEnum.CM334.getResultCode(), ExceptionEnum.CM334.getResultMsg());
162-
}
163-
164-
private boolean validatorPublicKey(String salt, PublicKey publicKey, PrivateKey privateKey) throws Exception {
165-
String plainSalt = decrypt(salt, privateKey);
166-
String cipherSalt = encrypt(plainSalt, publicKey);
167-
String decryptSalt = decrypt(cipherSalt, privateKey);
168-
if (plainSalt.equals(decryptSalt)) {
169-
return true;
170-
}
171-
return false;
172-
}
17387
}

base/src/test/java/com/tinyengine/it/service/app/impl/UserServiceImplTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static org.mockito.Mockito.when;
1717

1818
import cn.hutool.core.util.ReflectUtil;
19+
import com.tinyengine.it.login.service.impl.LoginServiceImpl;
1920
import com.tinyengine.it.mapper.UserMapper;
2021
import com.tinyengine.it.model.entity.User;
2122

@@ -41,6 +42,9 @@ class UserServiceImplTest {
4142
@InjectMocks
4243
private UserServiceImpl userServiceImpl;
4344

45+
@InjectMocks
46+
private LoginServiceImpl loginServiceImpl;
47+
4448
@BeforeEach
4549
void setUp() {
4650
MockitoAnnotations.openMocks(this);
@@ -97,7 +101,7 @@ void testCreateUser() throws Exception {
97101
User param = new User();
98102
when(userMapper.createUser(param)).thenReturn(1);
99103
when(userMapper.queryUserById(any())).thenReturn(param);
100-
User result = userServiceImpl.createUser(param);
104+
User result = loginServiceImpl.createUser(param);
101105
Assertions.assertEquals(param, result);
102106
}
103107
}

0 commit comments

Comments
 (0)