在Javaweb项目中用MVC模式进行后端管理员RSA加密登录前后端具体代码实现,要求使用MySQL数据库,利用layUI框架和ajax接口请求
时间: 2023-05-27 09:05:11 浏览: 212
1. 搭建Javaweb项目框架,集成MySQL数据库和layUI框架。
2. 创建MVC模式中的Model(模型)层,定义管理员用户实体类AdminUser,包含管理员用户名、密码等属性,并创建对应的数据表admin_user。
3. 创建MVC模式中的Controller(控制器)层,定义管理员用户的登录接口,通过HttpServletRequest获取前端传入的用户名和密码参数,调用Model层中的登录方法进行验证。如果验证通过则生成RSA公私钥对,并将私钥存储在Session中,将公钥返回给前端。如果验证不通过,则返回错误信息。
代码示例:
```java
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminUserService adminUserService;
@PostMapping("/login")
@ResponseBody
public Result login(HttpServletRequest request, String username, String password) {
AdminUser adminUser = adminUserService.login(username, password);
if (adminUser != null) {
// 生成RSA公私钥对
RSAUtils.RsaKeyPair keyPair = RSAUtils.generateKeyPair();
request.getSession().setAttribute("privateKey", keyPair.getPrivateKey());
return Result.success(keyPair.getPublicKey());
} else {
return Result.error("用户名或密码错误");
}
}
}
```
4. 创建MVC模式中的Service(服务)层,定义管理员用户的登录方法,通过MyBatis访问MySQL数据库进行验证。
代码示例:
```java
@Service
public class AdminUserService {
@Autowired
private AdminUserMapper adminUserMapper;
public AdminUser login(String username, String password) {
AdminUserExample example = new AdminUserExample();
example.createCriteria().andUsernameEqualTo(username).andPasswordEqualTo(password);
List<AdminUser> adminUsers = adminUserMapper.selectByExample(example);
if (adminUsers.size() > 0) {
return adminUsers.get(0);
} else {
return null;
}
}
}
```
5. 前端页面中使用layUI框架和ajax接口请求,获取服务器返回的RSA公钥,并使用jsencrypt库进行密码加密,将加密后的密码和用户名一起发送给服务器。
代码示例:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/layui/2.5.7/css/layui.min.css">
</head>
<body>
<div class="layui-container">
<div class="layui-row" style="margin-top: 20px;">
<div class="layui-col-md-offset3 layui-col-md6">
<form class="layui-form" id="login-form">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" name="username" required lay-verify="required" placeholder="请输入用户名"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-block">
<input type="password" name="password" required lay-verify="required" placeholder="请输入密码"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="login">登录</button>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/layui/2.5.7/layui.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js"></script>
<script>
layui.use(['form'], function () {
var form = layui.form;
//监听登录表单提交
form.on('submit(login)', function (data) {
//获取RSA公钥
$.post('/admin/login', function (result) {
//使用jsencrypt库加密密码
var encrypt = new JSEncrypt();
encrypt.setPublicKey(result.data);
var encryptedPassword = encrypt.encrypt(data.field.password);
//发送加密后的用户名和密码
$.post('/admin/doLogin', {
username: data.field.username,
password: encryptedPassword
}, function (result) {
if (result.code === 0) {
alert('登录成功');
} else {
alert(result.msg);
}
});
});
return false;
});
});
</script>
</body>
</html>
```
6. 在Controller层中创建doLogin方法,获取前端传来的用户名和加密后的密码,使用Session中的私钥解密密码,并进行验证。
代码示例:
```java
@PostMapping("/doLogin")
@ResponseBody
public Result doLogin(HttpServletRequest request, String username, String password) {
// 使用Session中的私钥解密密码
String decryptedPassword = RSAUtils.decrypt(password, (PrivateKey) request.getSession().getAttribute("privateKey"));
AdminUser adminUser = adminUserService.login(username, decryptedPassword);
if (adminUser != null) {
return Result.success();
} else {
return Result.error("用户名或密码错误");
}
}
```
7. 完成管理员RSA加密登录的后端代码实现。
阅读全文