在Javaweb项目中用MVC模式进行后端管理员RSA加密登录的具体代码实现,要求使用MySQL数据库,利用layUI框架和ajax接口请求
时间: 2023-05-27 12:06:00 浏览: 82
以下是一个简单的MVC模式的后端管理员RSA加密登录的代码实现,使用MySQL数据库和layUI框架和ajax接口请求:
1. 首先,在MySQL数据库中创建一个名为“admin”的表,其中包含以下字段:id, username, password, public_key, private_key。
2. 创建一个名为AdminController的控制器类,其中包含以下方法:
- login()方法:处理管理员登录请求,并将用户名和密码传递给loginService的login()方法。
- generateRSAKeys()方法:生成RSA公钥和私钥,并将它们保存到数据库中。
3. 创建一个名为LoginService的服务类,其中包含以下方法:
- login()方法:将用户名和密码与数据库中存储的密码进行比较,如果匹配,则返回true,否则返回false。
4. 创建一个名为RSAUtil的工具类,其中包含以下方法:
- generateRSAKeys()方法:生成RSA公钥和私钥。
- encrypt()方法:使用RSA公钥加密数据。
- decrypt()方法:使用RSA私钥解密数据。
5. 在layUI框架中创建一个名为login.html的前端页面,其中包含一个输入框和一个按钮。
6. 使用ajax接口请求将输入的用户名和密码发送到后端AdminController的login()方法,并接收响应。
7. 如果响应为true,则显示“登录成功”消息,否则显示“登录失败”消息。
下面是具体的代码实现:
AdminController.java
```
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private LoginService loginService;
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public boolean login(@RequestParam("username") String username,
@RequestParam("password") String password) {
return loginService.login(username, password);
}
@RequestMapping(value = "/generateRSAKeys", method = RequestMethod.GET)
@ResponseBody
public void generateRSAKeys() {
RSAUtil.generateKeys(username);
}
}
```
LoginService.java
```
@Service
public class LoginService {
@Autowired
private AdminDao adminDao;
public boolean login(String username, String password) {
Admin admin = adminDao.getAdminByUsername(username);
if (admin != null) {
String encryptedPassword = RSAUtil.encrypt(password, admin.getPublicKey());
return encryptedPassword.equals(admin.getPassword());
}
return false;
}
}
```
RSAUtil.java
```
public class RSAUtil {
private static final int KEY_SIZE = 1024;
public static void generateKeys(String username) {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(KEY_SIZE);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
String publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());
String privateKeyStr = Base64.getEncoder().encodeToString(privateKey.getEncoded());
Admin admin = new Admin();
admin.setUsername(username);
admin.setPublicKey(publicKeyStr);
admin.setPrivateKey(privateKeyStr);
adminDao.save(admin);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encrypt(String data, String publicKeyStr) {
try {
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String decrypt(String encryptedData, String privateKeyStr) {
try {
byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(decryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
```
login.html
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理员登录</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.min.js"></script>
</head>
<body>
<form>
<div>
<label>用户名:</label>
<input type="text" name="username">
</div>
<div>
<label>密码:</label>
<input type="password" name="password">
</div>
<button type="button" onclick="login()">登录</button>
</form>
<script>
function login() {
var username = $("input[name='username']").val();
var password = $("input[name='password']").val();
$.ajax({
url: "/admin/login",
type: "POST",
data: {
username: username,
password: password
},
success: function (data) {
if (data) {
layer.alert("登录成功");
} else {
layer.alert("登录失败");
}
}
});
}
</script>
</body>
</html>
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)