如何使用spring security和Thymeleaf获取当前登录用户的ID
我在我的项目和视图中使用Spring安全性。我正在尝试获取当前登录用户的ID,以便将其用于我的某些方法 例如,我试图将用户添加到一个类中。在html部分,我有这样的按钮如何使用spring security和Thymeleaf获取当前登录用户的ID,spring,spring-mvc,spring-security,thymeleaf,Spring,Spring Mvc,Spring Security,Thymeleaf,我在我的项目和视图中使用Spring安全性。我正在尝试获取当前登录用户的ID,以便将其用于我的某些方法 例如,我试图将用户添加到一个类中。在html部分,我有这样的按钮 <td th:each="user : ${user}"> <a th:href="@{/userList/{user_id}/saveClasses/{classes_id} (user_id=${user.id}, classes_id=${classes.id})}">Attend</
<td th:each="user : ${user}">
<a th:href="@{/userList/{user_id}/saveClasses/{classes_id} (user_id=${user.id}, classes_id=${classes.id})}">Attend</a>
</td>
当我运行代码时,我在数据库中为我的两个用户获得了两个出席按钮。我想有一个按钮的用户,当然是目前登录。我该怎么做 要显示登录用户的用户名,我使用以下命令:
<span sec:authorize="isAuthenticated()">
<a class="navbar-brand" href="#">Hello <span sec:authentication="name"></span></a>
</span>
据我所知,在
${user}
下,您有数据库中的用户列表。
我在这里看到两种选择
public String foo(Model model) {
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username = user.getUsername();
model.addAttribute("username", username);
return "your_view";
}
然后在html中:
<td th:each="user : ${user}">
<a th:if="${username == user.username}" th:href="@{/userList/{user_id}/saveClasses/{classes_id} (user_id=${user.id}, classes_id=${classes.id})}">Attend</a>
</td>
username
。
另外,我建议将用户列表保存在名为
users
的变量中,而不是oduser
——这样更易于阅读。解决方案
在花了几个小时试图找到答案后,我终于找到了适合我的解决方案 我已经使用存储库完成了这项工作,这是我的实现: UserRepository.java
@Repository
public interface UserRepository extends CrudRepository<User, Long>, UserDetailsService {
public User findUserByUsername(String username);
}
@RequestMapping("/dashboardUser")
public String dashboardPageList(Model model, @AuthenticationPrincipal UserDetails currentUser ) {
User user = (User) userRepository.findUserByUsername(currentUser.getUsername());
model.addAttribute("currentStudent", user);
return "dashboardUser";
}
}
controller.java
@Repository
public interface UserRepository extends CrudRepository<User, Long>, UserDetailsService {
public User findUserByUsername(String username);
}
@RequestMapping("/dashboardUser")
public String dashboardPageList(Model model, @AuthenticationPrincipal UserDetails currentUser ) {
User user = (User) userRepository.findUserByUsername(currentUser.getUsername());
model.addAttribute("currentStudent", user);
return "dashboardUser";
}
在.html文件中,我这样显示它
<div class="form-group label-floating">
<label>Username</label>
<input type="text" name="username"
th:value="${currentStudent.username}"/>
</div>
用户名
使用第一个选项,如何获取当前登录用户的ID?我能看到的就是用户名,就是它。我已经做到了。在第二个选项中,我会得到ID吗?使用th:each=“user:${user}”
我将再一次在行中设置出席按钮的数量,因为我将用户存储在数据库中。我只想从当前登录的用户@NequeqI添加了它,但我得到了这个错误:ClassCastException:org.springframework.security.core.userdetails.User不能转换为com.oggi.model.User
你知道为什么吗?好的,我犯了一个错误SecurityContextHolder.getContext().getAuthentication().getPrincipal()
返回实现接口用户详细信息的类。您的类必须实现此接口,然后您应该能够将其转换为UserDetails
,而不是User
。试试这个,让我知道。我有一个问题,这个方法是在我的控制器。我再次更新了我的问题以显示它的样子。当我用这行代码实现UserDetails时long id=user.getId()代码>我无法获取ID我只能获取权限()、类()、密码()和用户名()@你有完整的例子。