diff options
Diffstat (limited to 'spring-boot/10-role-based-security/src/main/java/com/example/spring/contact/controller')
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; + } + +} |
