在没有 Spring 安全性的情况下如何获取当前用户的 ID?

How can I get the current user's ID without Spring Security?

我正在制作一个 Edairy 应用程序,我现在正在制作 StudentGrades HTML 页面,该页面应列出学生的科目及其成绩。不同的学生有不同的科目很重要,所以我只想显示登录学生的科目和他们的成绩。 (例如student1有化学和物理,student2有P.E., Mathematics)

现在我正在尝试创建一种方法,根据当前登录的学生 ID select 从数据库中获取主题,但我不使用 Spring 安全性。我尝试了两种不同的方法,但都失败了。

public List<Subject> findAll(Integer userId) {

    
    String sql = "SELECT subject.subjectName,subject.subjectId FROM subject inner join subjectgrade on subject.subjectId = subjectgrade.subjectId right join users on subjectgrade.userId = users.user_id where subjectgrade.userId = ?";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Subject.class));
}
 

在这次尝试中,程序无法处理预期的任务,因为 userId 存在,但它是原始类型,出于某种原因不喜欢它:

Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'userId' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

第二次尝试时,我尝试将用户传递到参数中。使用该方法,程序成功 运行,但它没有 select 登录用户的主题,因为我无法弄清楚如何从会话中获取用户 ID(?)。

public List<Subject> findAll(User user) {

    
    String sql = "SELECT subject.subjectName,subject.subjectId FROM subject inner join subjectgrade on subject.subjectId = subjectgrade.subjectId right join users on subjectgrade.userId = users.user_id where subjectgrade.userId = "+ user.getUserId();
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Subject.class));
}

请务必注意,我没有使用 Spring 安全性,因为我只是在练习编码。我可以在不重新构建整个程序的情况下获取用户 ID 吗?还是我犯了一个巨大的逻辑错误使我停了下来? (?) = 不确定如何称呼它。

如异常所述,user_id 属于 int 类型,它是原始类型。原始类型不能是 NULL.

要将 NULL 用于 int 值,您需要使用名为 Integer 的相应包装器 class,它允许分配 NULL.