summaryrefslogtreecommitdiff
path: root/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-06-20 18:25:56 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-06-20 18:25:56 +0530
commit41b068b6d48f9d82babd1cfce3520ad0b28be861 (patch)
tree0a9db394d2f14b7f14c3b1d167f56d4dfecd4563 /spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller
parent8c66a82e0caa71c3bb1c1dc40d91272f51c1c0f5 (diff)
Added Spring Boot role based security sample application
Diffstat (limited to 'spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller')
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactController.java49
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactForm.java45
2 files changed, 94 insertions, 0 deletions
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactController.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactController.java
new file mode 100644
index 0000000..abc7e83
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactController.java
@@ -0,0 +1,49 @@
+package com.example.spring.contact.controller;
+
+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.PostMapping;
+
+import jakarta.validation.Valid;
+
+@Controller
+public class ContactController {
+
+ /*
+ * Some values that can be used with @PreAuthorize():
+ *
+ * hasRole('ADMIN'): Checks if the user contains the authority ROLE_ADMIN.
+ *
+ * hasAnyRole('USER', 'ADMIN'): Passes if the user has at least one matching
+ * authority.
+ *
+ * isAuthenticated(): Verifies that the client is logged into the system
+ */
+
+ @GetMapping("/contact")
+ @PreAuthorize("hasAnyRole('USER', 'ADMIN')")
+ public String showForm(Model model) {
+ model.addAttribute("contactForm", new ContactForm());
+ return "contact/form";
+ }
+
+ @PostMapping("/contact")
+ @PreAuthorize("hasAnyRole('USER', 'ADMIN')")
+ public String processSubmission(@Valid @ModelAttribute ContactForm contactForm, BindingResult bindingResult,
+ Model model) {
+ if (bindingResult.hasErrors()) {
+ return "contact/form";
+ }
+
+ // Do whatever needed with the submitted data here.
+ // For example, invoke a method in a service/componet bean to send an email to
+ // contact person.
+
+ return "contact/result";
+ }
+
+}
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactForm.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactForm.java
new file mode 100644
index 0000000..925999b
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller/ContactForm.java
@@ -0,0 +1,45 @@
+package com.example.spring.contact.controller;
+
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
+
+public class ContactForm {
+
+ @Pattern(regexp = "^[ a-zA-Z]+$", message = "Name should only include English letters")
+ @NotBlank(message = "Name is required")
+ private String name;
+
+ @Email(message = "Must be a valid email")
+ @NotBlank(message = "Email is required")
+ private String email;
+
+ @Size(min = 10, message = "Message must be at least 10 characters long")
+ private String message;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+}