У меня есть сайт стороннего проекта, где люди могут комментировать материал, теперь мне нужно отобразить комментарии пользователя и имя пользователя комментатора.Проблема в том, что я не могу получить имя пользователя, вошедшего в систему.
Примеры комментариев:
1) Комментарий от - Shelo
Тестовый комментарий
2) КомментарийBy - ProGa
Тестовый комментарий 2
Теперь, проблема в том, что если я попытаюсь получить имя пользователя, вошедшего в систему в данный момент, оба комментария будут иметь одинаковое имя пользователякогда пользователь входит в систему
Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
String name = loggedInUser.getName();
В приведенном выше примере кода показано, как вы вошли в систему.Поэтому, если я использую этот код и пытаюсь отобразить имя пользователя с помощью String name
, и, скажем, некоторые пользователи входят в систему с именем пользователя - "Davos" , оба комментария будут выглядеть так:
1) Комментарий: Давос
Комментарий к тесту
2) Комментарий: Давос
Комментарий к тесту 2
Что мне нужно - это получить имя пользователя, который вошел в систему и, если он оставит комментарий, отобразить его имя пользователя.Когда он выходит из системы или другой пользователь входит в систему, «имя пользователя» комментария должно оставаться прежним и не должно меняться в зависимости от того, кто в данный момент вошел в систему.
Моя схема базы данных
Класс контроллера (только соответствующий код):
@GetMapping("/foodDescription/{id}")
public String foodDescriptionPage(Model model, @PathVariable(name = "id") String id){
menuRepository.findById(id).ifPresent(o -> model.addAttribute("menu", o));
return "food-description";
}
@PostMapping("/postComment/{id}")
public String postComment(@RequestParam String myComment, Model model, @PathVariable(name = "id") String id){
Optional<Menu> menu = menuRepository.findById(id);
menuRepository.findById(id).ifPresent(o -> model.addAttribute("menu", o));
List<Comments> myCommentsList = menu.get().getComments();
myCommentsList.add(new Comments(myComment));
menu.get().setComments(myCommentsList);
menuRepository.save(menu.get());
return "food-description";
}
food-description.html (Только соответствующий код для раздела комментариев):
<h3 th:text = "Comments">asd</h3>
<form th:action = "@{/postComment/{myMenuId}(myMenuId=${menu.id})}" method="POST">
<textarea rows="2" cols="100" name="myComment"></textarea>
<input type="submit" th:value="Add"/>
</form>
<div class="comment" th:each="com : ${menu.comments}">
<h3 th:text="Display Commenter's Username here">Commenter's Username</h3>
<ul>
<li th:text = "${com.comment}">Comment</li>
</ul>
</div>
Сущность пользователя:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "users_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Role role;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "users_comments",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "comment_id"))
private List<Comments> comments = new ArrayList<>();
// Getters/Setters/Constructor
}
Сущность комментария:
@Entity
@Table(name = "comments")
public class Comments {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "comment")
private String comment;
// Getters/Setters/Constructor