spring - 登录用户的 WebServlet 列表
问题描述
我正在尝试创建一个药物列表,以便添加药物的用户可以看到它们并且只有他可以看到,而他不会看到其他用户的药物。但是,当我登录在数据库中添加了 2 种药物的账户时,我访问了我的 servlet /mlist,我看到“列表中没有药物”,因为我的 user_id 被分配了 0,我不明白为什么。
//编辑“我request.getSession().getAttribute("user_id");
错了,因为它没有占用用户会话,正确的是request.getSession().getAttribute("user");
”
但现在我遇到了新问题PreparedStatementCallback; SQL [SELECT id_medicines, name, drugform, quantity, expiration_date, description, user_id FROM medicines WHERE user_id= ?Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
//
SQL 调用
public List<Medicines> findByProperty(String propName, Object propValue) {
String sql = "SELECT id_medicines, name, drugform, quantity, expiration_date,
description, user_id FROM medicines WHERE "+propName+"= ?";
List<Medicines> medicines = jdbcTemplate.query(sql, new MedicinesRowMapper(), propValue);
return medicines;
}
药品服务
public List<Medicines> findUserMedicines(User user_id){
DAOFactory factory = DAOFactory.getDAOFactory();
MedicinesDAO medicinesDao = factory.getMedicinesDAO();
return medicinesDao.findByProperty("user_id", user_id);
}`
findUserMedicines 取自 DAOFactory 这一行public abstract MedicinesDAO getMedicinesDAO();
小服务程序 /mlist
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
medicinesList(request);
request.getRequestDispatcher("WEB-INF/mlist.jsp").forward(request, response);
}
public void medicinesList(HttpServletRequest request) throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");
MedicinesService medicinesService = new MedicinesService();
User user_id = (User) request.getSession().getAttribute("user");
List<Medicines> userMedicines = medicinesService.findUserMedicines(user_id);
request.setAttribute("medicines", userMedicines);
}
登录过滤器
private void saveUserInSession(HttpServletRequest request) {
UserService userService = new UserService();
String username = request.getUserPrincipal().getName();
User userByUsername = userService.getUserByUsername(username);
request.getSession(true).setAttribute("user", userByUsername);
}
解决方案
问题出在线路上User user_id = (User) request.getSession().getAttribute("user");
。您User
在问题中未提供的课程未序列化。但即使你让它可序列化,我怀疑它会给你想要的结果。
我想你的用户 id 实际上是一个String
. User
从您的对象中获取用户 ID作为 aString
并将其传递到您的查询中。(即使它位于 anint
或 a 的位置,同样适用long
。您需要从您的User
对象中获取它。
类似的东西
String userIdString = user_id.getId();
如果您在问题中提供您的User
课程,我可以更新答案。
推荐阅读
- c++ - 将二进制文件读入 uint32_t 的向量
- android - Android Studio 问题,kt 文件以未知形式出现?
- java - 从 Java 中的单词打印元音
- c# - 实体框架:部署时 DBContext 无法连接到另一台 PC 上的服务器
- c++ - unordered_map 的存在决定了是使用复制构造函数还是移动构造函数
- python - 可以使用 Python 在 Plotly 中定义 X 和 Y 值吗?
- perl - 如何使用 moose 设置默认 FileHandle 属性
- centos - 正确的 /var/www 的 Centos 分区设置
- dart - 正确 Flutter 小部件序列以在应用加载时提取数据
- javascript - 脚本标签在反应上相对或直接不起作用