summaryrefslogtreecommitdiff
path: root/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-06-20 22:02:32 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-06-20 22:02:32 +0530
commit69b18c1fe1d7d876c86de850b716de396877ad9d (patch)
tree832330933dccb4848ba0ff89a9f4f5953b3da3e7 /spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers
parent59c2d3502259b338c36991ced8dc25d8dc9713b1 (diff)
A list of users are shown. Added error pages.
Diffstat (limited to 'spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers')
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserController.java67
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserForm.java27
2 files changed, 94 insertions, 0 deletions
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserController.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserController.java
new file mode 100644
index 0000000..d9f5fdd
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserController.java
@@ -0,0 +1,67 @@
+package com.example.spring.security.controllers;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import com.example.spring.security.entity.User;
+import com.example.spring.security.repository.UserRepository;
+import com.example.spring.security.service.UserService;
+
+import jakarta.validation.Valid;
+
+@Controller
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ @GetMapping("/security/users")
+ @PreAuthorize("hasRole('ADMIN')")
+ public String showUsers(Model model) {
+ List<User> users = userService.findAll();
+
+ model.addAttribute("users", users);
+
+ return "security/users";
+ }
+
+ @GetMapping("/security/user/update/{id}")
+ @PreAuthorize("hasRole('ADMIN')")
+ public String showEditForm(@PathVariable Long id, Model model) {
+ Optional<User> userOpt = userService.findById(id);
+
+ User user = userOpt.get();
+
+ UserForm form = new UserForm();
+ form.setId(user.getId());
+ form.setUsername(user.getUsername());
+ form.setDescription(user.getDescription());
+
+ model.addAttribute("userForm", form);
+
+ return "security/user-form";
+ }
+
+ @PostMapping("/security/user/update")
+ @PreAuthorize("hasRole('ADMIN')")
+ public String updateUser(@Valid @ModelAttribute UserForm userForm, BindingResult bindingResult,
+ Model model) {
+ if (bindingResult.hasErrors()) {
+ return "security/user-form";
+ }
+
+ userService.updateUser(userForm.getId(), userForm.getDescription());
+
+ return "redirect:/security/users";
+ }
+}
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserForm.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserForm.java
new file mode 100644
index 0000000..8df4932
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserForm.java
@@ -0,0 +1,27 @@
+package com.example.spring.security.controllers;
+
+public class UserForm {
+
+ private Long id;
+ private String username;
+ private String description;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getUsername() {
+ return username;
+ }
+ public void setUsername(String username) {
+ this.username = username;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}