Skip to content

Commit 8855de5

Browse files
author
Pavan Jadda
committed
Merge remote-tracking branch 'origin/development' into development
# Conflicts: # src/main/java/com/pj/keycloak/security/Roles.java # src/main/java/com/pj/keycloak/security/SecurityConfig.java
2 parents d5c40bb + b4d0be1 commit 8855de5

File tree

12 files changed

+135
-39
lines changed

12 files changed

+135
-39
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.pj.keycloak.security;
2+
3+
import org.springframework.security.web.csrf.CsrfToken;
4+
import org.springframework.web.filter.OncePerRequestFilter;
5+
import org.springframework.web.util.WebUtils;
6+
7+
import javax.servlet.FilterChain;
8+
import javax.servlet.ServletException;
9+
import javax.servlet.http.Cookie;
10+
import javax.servlet.http.HttpServletRequest;
11+
import javax.servlet.http.HttpServletResponse;
12+
import java.io.IOException;
13+
14+
public class CustomCsrfFilter extends OncePerRequestFilter
15+
{
16+
17+
public static final String CSRF_COOKIE_NAME = "XSRF-TOKEN";
18+
19+
@Override
20+
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
21+
throws ServletException, IOException
22+
{
23+
24+
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
25+
26+
if (csrf != null)
27+
{
28+
29+
Cookie cookie = WebUtils.getCookie(request, CSRF_COOKIE_NAME);
30+
String token = csrf.getToken();
31+
32+
if (cookie == null || token != null && !token.equals(cookie.getValue()))
33+
{
34+
cookie = new Cookie(CSRF_COOKIE_NAME, token);
35+
cookie.setPath("/");
36+
response.addCookie(cookie);
37+
}
38+
}
39+
40+
filterChain.doFilter(request, response);
41+
}
42+
}

src/main/java/com/pj/keycloak/service/EmployeeService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ public interface EmployeeService
1414
void updateProfile(Employee employee);
1515

1616
void saveAndFlush(Employee employee);
17+
18+
void deleteById(Long id);
1719
}

src/main/java/com/pj/keycloak/service/EmployeeServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,10 @@ public void saveAndFlush(Employee employee)
4646
{
4747
employeeRepository.saveAndFlush(employee);
4848
}
49+
50+
@Override
51+
public void deleteById(Long id)
52+
{
53+
employeeRepository.deleteById(id);
54+
}
4955
}

src/main/java/com/pj/keycloak/util/UserInfoUtil.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ public String getPreferredUsername(HttpServletRequest httpServletRequest)
2626
KeycloakAuthenticationToken keycloakAuthenticationToken= (KeycloakAuthenticationToken) httpServletRequest.getUserPrincipal();
2727
logger.info("Subject: {}",keycloakAuthenticationToken.getAccount().getKeycloakSecurityContext().getToken().getSubject());
2828
*/
29-
30-
logger.info("getUserPrincipal(): {}",httpServletRequest.getUserPrincipal());
31-
logger.info("User GUID: {}",accessToken.getSubject());
32-
3329
return accessToken.getPreferredUsername();
3430
}
3531
}

src/main/java/com/pj/keycloak/web/EmployeeController.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import com.pj.keycloak.util.UserInfoUtil;
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
8-
import org.springframework.web.bind.annotation.GetMapping;
9-
import org.springframework.web.bind.annotation.PathVariable;
10-
import org.springframework.web.bind.annotation.RequestMapping;
11-
import org.springframework.web.bind.annotation.RestController;
8+
import org.springframework.web.bind.annotation.*;
129

1310
import javax.servlet.http.HttpServletRequest;
1411
import java.util.List;
@@ -35,8 +32,7 @@ public EmployeeController(EmployeeService employeeService, UserInfoUtil userInfo
3532
public List<Employee> findAll(HttpServletRequest httpServletRequest)
3633
{
3734
logger.info("User Id: {}",userInfoUtil.getPreferredUsername(httpServletRequest));
38-
List<Employee> employees=employeeService.findAll();
39-
return employees;
35+
return employeeService.findAll();
4036
}
4137

4238
@GetMapping(path = "/find/{id}")
@@ -52,22 +48,22 @@ public List<Employee> update(@PathVariable Long id)
5248
return employeeService.findAll();
5349
}
5450

55-
@GetMapping(path = "/create")
56-
public List<Employee> create()
51+
@PostMapping(path = "/create")
52+
public List<Employee> create(@RequestBody Employee employee)
5753
{
58-
Employee employee=new Employee();
59-
employee.setFirstName(generateString());
60-
employee.setLastName(generateString());
61-
employee.setEmail(generateString());
62-
employee.setSalary(new Random().nextDouble()*10000000);
6354
employee.setEmployeeId((long) new Random().nextInt(999999));
6455
employee.setUserGuid(generateString());
65-
employee.setLocation(generateString());
6656
employeeService.saveAndFlush(employee);
6757

6858
return employeeService.findAll();
6959
}
7060

61+
@DeleteMapping(path = "/delete/{id}")
62+
public void deleteEmployee(@PathVariable Long id)
63+
{
64+
employeeService.deleteById(id);
65+
}
66+
7167
private String generateString()
7268
{
7369
int leftLimit = 97; // letter 'a'

src/main/resources/application.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ keycloak:
99
resource: angular-app
1010
public-client: true
1111
principal-attribute: preferred_username
12-
13-
12+
enabled: true
1413

1514
#Spring Properties
1615
spring:

src/main/webapp/spring-data-ui/package-lock.json

Lines changed: 30 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/webapp/spring-data-ui/src/app/employee-list/employee-list.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<th scope="col">Phone</th>
1515
<th scope="col">Salary</th>
1616
<th scope="col">Location</th>
17+
<th scope="col">Action</th>
1718
</tr>
1819
</thead>
1920
<tbody *ngFor="let employee of employees">
@@ -26,6 +27,7 @@
2627
<td>{{employee.phone}}</td>
2728
<td>${{employee.salary}}</td>
2829
<td>{{employee.location}}</td>
30+
<td><button (click)="deleteEmployee(employee.id)" class="btn btn-danger">Delete</button></td>
2931
</tr>
3032
</tbody>
3133
</table>

src/main/webapp/spring-data-ui/src/app/employee-list/employee-list.component.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {Component, OnInit} from "@angular/core";
2+
import {Router} from "@angular/router";
23
import {NgxSpinnerService} from "ngx-spinner";
34
import {KeycloakService} from "../keycloak/keycloak.service";
45
import {Employee} from "./employee";
@@ -15,7 +16,9 @@ export class EmployeeListComponent implements OnInit
1516

1617
constructor(private employeeService:EmployeeService,
1718
private keycloakService:KeycloakService,
18-
private ngxSpinnerService:NgxSpinnerService) { }
19+
private ngxSpinnerService:NgxSpinnerService,
20+
private router:Router)
21+
{ }
1922

2023
ngOnInit()
2124
{
@@ -62,7 +65,17 @@ export class EmployeeListComponent implements OnInit
6265
createEmployee()
6366
{
6467
this.ngxSpinnerService.show();
65-
this.employeeService.createEmployee('http://localhost:8081/api/v1/employee/create').subscribe(
68+
let employee=new Employee();
69+
employee.employeeId=1001;
70+
employee.location='Falls Church';
71+
employee.salary=200000;
72+
employee.email='[email protected]';
73+
employee.firstName='John';
74+
employee.lastName='Doe';
75+
employee.phone='202-345-2333';
76+
77+
78+
this.employeeService.createEmployee('http://localhost:8081/api/v1/employee/create',employee).subscribe(
6679
data=>
6780
{
6881
this.employees=data;
@@ -74,4 +87,18 @@ export class EmployeeListComponent implements OnInit
7487
}
7588
);
7689
}
90+
91+
deleteEmployee(id: number)
92+
{
93+
this.employeeService.deleteEmployee('http://localhost:8081/api/v1/employee/delete/'+id).subscribe(
94+
data=>
95+
{
96+
this.getEmployees();
97+
},
98+
error1 =>
99+
{
100+
this.ngxSpinnerService.hide();
101+
}
102+
);
103+
}
77104
}

src/main/webapp/spring-data-ui/src/app/employee-list/employee.service.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,13 @@ export class EmployeeService {
1919
return this.httpClient.get<Employee[]>(url);
2020
}
2121

22-
createEmployee(url: string)
22+
createEmployee(url: string, employee: Employee)
2323
{
24-
return this.httpClient.get<Employee[]>(url);
24+
return this.httpClient.post<Employee[]>(url, employee);
25+
}
26+
27+
deleteEmployee(url: string)
28+
{
29+
return this.httpClient.delete(url);
2530
}
2631
}

0 commit comments

Comments
 (0)