Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 600909a

Browse files
spring-boot application
1 parent 6060d38 commit 600909a

File tree

3 files changed

+113
-37
lines changed

3 files changed

+113
-37
lines changed

‎src/main/java/com/example/devopsapp/controller/AuthController.java‎

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,12 @@
66
import jakarta.servlet.http.HttpSession;
77
import org.springframework.beans.factory.annotation.Autowired;
88

9-
import org.springframework.security.authentication.AuthenticationManager;
10-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
11-
12-
import org.springframework.security.core.Authentication;
13-
import org.springframework.security.core.context.SecurityContextHolder;
14-
159
import org.springframework.stereotype.Controller;
1610
import org.springframework.ui.Model;
17-
import org.springframework.validation.BindingResult;
18-
19-
import org.springframework.web.bind.annotation.GetMapping;
20-
import org.springframework.web.bind.annotation.ModelAttribute;
21-
22-
import org.springframework.web.bind.annotation.PostMapping;
23-
import org.springframework.web.bind.annotation.RequestParam;
11+
import org.springframework.web.bind.annotation.*;
2412

2513
import java.security.Principal;
14+
import java.util.List;
2615
import java.util.Optional;
2716

2817
@Controller
@@ -52,7 +41,6 @@ public String registerPage(Model model) {
5241

5342
@PostMapping("/register")
5443
public String registerUser(@ModelAttribute("user") User user, Model model) {
55-
// Check if email or username already exists
5644
Optional<User> byEmail = userService.findByEmail(user.getEmail());
5745
Optional<User> byUsername = userService.findByUsername(user.getUsername());
5846

@@ -76,18 +64,19 @@ public String dashboard(Model model, Principal principal) {
7664
if (principal == null) {
7765
return "redirect:/login";
7866
}
79-
String email = principal.getName();
8067

68+
String email = principal.getName();
8169
Optional<User> userOpt = userService.findByEmail(email);
70+
8271
if (userOpt.isEmpty()) {
8372
return "redirect:/login";
8473
}
74+
8575
User user = userOpt.get();
8676

8777
model.addAttribute("username", user.getUsername());
8878
model.addAttribute("email", user.getEmail());
8979

90-
// DevOps materials (can be static, hardcoded here)
9180
model.addAttribute("materials", new String[]{
9281
"Docker Basics",
9382
"Kubernetes Tutorial",
@@ -97,7 +86,9 @@ public String dashboard(Model model, Principal principal) {
9786
"Memcached Caching"
9887
});
9988

89+
List<User> allUsers = userService.getAllUsers();
90+
model.addAttribute("allUsers", allUsers);
91+
10092
return "dashboard";
10193
}
102-
10394
}

‎src/main/java/com/example/devopsapp/service/UserService.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
77
import org.springframework.stereotype.Service;
88

9+
import java.util.List;
910
import java.util.Optional;
1011

1112
@Service
@@ -38,4 +39,8 @@ public User saveUser(User user) {
3839
public boolean checkPassword(User user, String rawPassword) {
3940
return passwordEncoder.matches(rawPassword, user.getPassword());
4041
}
42+
43+
public List<User> getAllUsers() {
44+
return userRepository.findAll();
45+
}
4146
}
Lines changed: 100 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,110 @@
11
<!DOCTYPE html>
22
<html xmlns:th="http://www.thymeleaf.org">
33
<head>
4-
<title>Dashboard - DevOps App</title>
5-
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
4+
<title>Dashboard - DevOps Tutorials</title>
5+
<style>
6+
body {
7+
font-family: 'Segoe UI', sans-serif;
8+
background: #f0f2f5;
9+
margin: 0;
10+
padding: 0;
11+
}
12+
.navbar {
13+
background-color: #2c3e50;
14+
padding: 15px 30px;
15+
color: white;
16+
display: flex;
17+
justify-content: space-between;
18+
align-items: center;
19+
}
20+
.navbar h2 {
21+
margin: 0;
22+
font-size: 24px;
23+
}
24+
.logout-button {
25+
background-color: #e74c3c;
26+
color: white;
27+
padding: 10px 16px;
28+
border: none;
29+
border-radius: 6px;
30+
font-size: 14px;
31+
cursor: pointer;
32+
transition: background-color 0.3s ease;
33+
text-decoration: none;
34+
}
35+
.logout-button:hover {
36+
background-color: #c0392b;
37+
}
38+
.container {
39+
margin: 30px auto;
40+
max-width: 1000px;
41+
background: white;
42+
padding: 30px;
43+
border-radius: 12px;
44+
box-shadow: 0 8px 16px rgba(0,0,0,0.1);
45+
}
46+
h3 {
47+
color: #333;
48+
}
49+
ul {
50+
padding-left: 20px;
51+
}
52+
table {
53+
width: 100%;
54+
border-collapse: collapse;
55+
margin-top: 25px;
56+
}
57+
table th, table td {
58+
border: 1px solid #ccc;
59+
padding: 12px;
60+
text-align: left;
61+
}
62+
table th {
63+
background: #eee;
64+
}
65+
.userinfo {
66+
margin-top: 10px;
67+
background-color: #f9f9f9;
68+
padding: 15px;
69+
border-left: 4px solid #3498db;
70+
}
71+
</style>
672
</head>
7-
<body class="bg-light">
8-
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
9-
<div class="container">
10-
<a class="navbar-brand" href="#">DevOps Dashboard</a>
11-
<div>
12-
<span class="navbar-text me-3">
13-
Logged in as <b th:text="${username}"></b> (<span th:text="${email}"></span>)
14-
</span>
15-
<a href="/logout" class="btn btn-outline-light btn-sm">Logout</a>
16-
</div>
73+
<body>
74+
<div class="navbar">
75+
<h2>DevOps Dashboard</h2>
76+
<a href="/logout" class="logout-button">Logout</a>
77+
</div>
78+
79+
<div class="container">
80+
<div class="userinfo">
81+
<p><strong>Logged-in User:</strong></p>
82+
<p>Username: <span th:text="${username}"></span></p>
83+
<p>Email: <span th:text="${email}"></span></p>
1784
</div>
18-
</nav>
1985

20-
<div class="container mt-5">
21-
<h3>Welcome, <span th:text="${username}">User</span>!</h3>
22-
<p>Here are some DevOps materials and tutorials:</p>
86+
<h3>DevOps Tutorials & Tools</h3>
87+
<ul>
88+
<li th:each="item : ${materials}" th:text="${item}"></li>
89+
</ul>
2390

24-
<div class="list-group">
25-
<a href="#" th:each="material : ${materials}"
26-
class="list-group-item list-group-item-action" th:text="${material}"></a>
27-
</div>
91+
<h3>All Registered Users</h3>
92+
<table>
93+
<thead>
94+
<tr>
95+
<th>#</th>
96+
<th>Username</th>
97+
<th>Email</th>
98+
</tr>
99+
</thead>
100+
<tbody>
101+
<tr th:each="user, iterStat : ${allUsers}">
102+
<td th:text="${iterStat.index + 1}"></td>
103+
<td th:text="${user.username}"></td>
104+
<td th:text="${user.email}"></td>
105+
</tr>
106+
</tbody>
107+
</table>
28108
</div>
29109
</body>
30110
</html>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /