diff options
| author | Kamal Wickramanayake <kamal@inbox.lk> | 2026-06-20 22:02:32 +0530 |
|---|---|---|
| committer | Kamal Wickramanayake <kamal@inbox.lk> | 2026-06-20 22:02:32 +0530 |
| commit | 69b18c1fe1d7d876c86de850b716de396877ad9d (patch) | |
| tree | 832330933dccb4848ba0ff89a9f4f5953b3da3e7 /spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers | |
| parent | 59c2d3502259b338c36991ced8dc25d8dc9713b1 (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')
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; + } +} |
