如何利用session.getattribute将后端数据传入前端
时间: 2024-05-07 13:16:17 浏览: 132
可以通过在后端设置session属性,然后在前端用EL表达式获取session属性来实现。示例代码如下:
在后端Java代码中:
```
String data = "后端数据";
session.setAttribute("data", data);
```
在前端JSP页面中:
```
<p>${sessionScope.data}</p>
```
此时,前端页面将会显示后端传递过来的数据“后端数据”。
相关问题
在Javaweb项目中用MVC模式进行后端管理员RSA加密登录前后端具体代码实现,要求使用MySQL数据库,利用layUI框架和ajax接口请求
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加密登录的后端代码实现。
编写一个代码完成用户信息修改功能:在用户列表页面中单击“修改该用户”超链接,跳转到showUser.jsp,显示所用修改用户的信息,编辑完用户信息后单击确定按钮,修改信息完成,并显示“修改用户成功”提示信息
为了实现这个用户信息修改功能,我们可以结合前端HTML、CSS以及后端Java Servlet或JSP技术来构建。下面是一个简单的示例步骤:
1. **HTML界面** (`showUser.jsp`):
```html
<!DOCTYPE html>
<html>
<head>
<title>修改用户信息</title>
<!-- 引入表单样式和提交处理 -->
<script src="js/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<form id="editForm">
<input type="hidden" name="userId" value="<%=request.getAttribute("userId")%>" />
<label for="username">用户名:</label>
<input type="text" id="username" name="username" value="<%=session.getAttribute("username")%>"><br><br>
<!-- 添加其他用户属性输入框... -->
<button type="submit">确定</button>
</form>
<div id="message" style="display:none;">修改用户成功</div>
<script>
$(document).ready(function() {
// 提交事件监听
$("#editForm").on('submit', function(e) {
e.preventDefault(); // 阻止默认提交
var formData = $(this).serialize();
$.ajax({
url: "updateUserServlet",
type: "POST",
data: formData,
success: function(response) {
if (response === 'success') {
$('#message').show();
} else {
alert("修改失败,请检查信息");
}
},
error: function() {
alert("服务器错误,请稍后再试");
}
});
});
});
</script>
</body>
</html>
```
2. **后端Java Servlet (updateUserServlet.java):**
```java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/updateUserServlet")
public class updateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username"); // 获取提交的用户名
// 这里假设你已经有了从数据库获取和更新用户数据的方法
boolean isSuccess = updateUserInDatabase(username);
if (isSuccess) {
response.getWriter().print("success");
} else {
response.getWriter().print("failure");
}
}
private boolean updateUserInDatabase(String username) {
// 你的数据库操作逻辑...
}
}
```
3. **登录验证和用户ID传递:**
确保用户已经登录并通过session或cookie将用户ID传入`showUser.jsp`。例如,在登录成功后,可以设置`setAttribute("userId", userId)`。
阅读全文