代码之家  ›  专栏  ›  技术社区  ›  user8421021

如何使用spring security和Thymeleaf获取当前登录用户的ID

  •  3
  • user8421021  · 技术社区  · 8 年前

    我在我的项目和Thymeleaf视图中使用Spring security。我正在尝试获取当前登录用户的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</a>
    </td>
    


    我想有一个用户,当然是目前登录按钮。我该怎么做?

    <span sec:authorize="isAuthenticated()"> 
        <a class="navbar-brand" href="#">Hello <span sec:authentication="name"></span></a>
    </span>
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   user8421021 user8421021    8 年前

    解决方案


    用户存储库。Java语言

    @Repository
    public interface UserRepository extends CrudRepository<User, Long>, UserDetailsService {
    
         public User findUserByUsername(String username);
    
    }
    

    UserRepositoryImpl

    公共类UserRepositoryImpl实现UserDetailsService{

    @Autowired
     private UserRepository userRepository;
    
     @Override
     public UserDetails loadUserByUsername(String username) {
      return userRepository.findUserByUsername(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>
    
        2
  •  1
  •   wpater    8 年前

    据我所知 ${user}

    1. 您可以添加到 Model 控制器中当前登录的用户:

      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>
      
    2. th:each 您可以添加 th:if 检查一下 user 当前已登录。这里也有一些方法。其中之一是:

      <td th:each="user : ${user}">
          <a th:if="${#authentication.getName() == user.username}" th:href="@{/userList/{user_id}/saveClasses/{classes_id} (user_id=${user.id}, classes_id=${classes.id})}">Attend</a>
      </td>
      
    3. 如果你有数据库,你可能有模型- here 您可以找到如何使用自定义类为用户执行此操作的详细说明。1和2选项在您的情况下是最简单的,但这一个更优雅。

    在我的解决方案中,来自数据库需求字段的用户 username . users 相反,od 使用者

    推荐文章