source: src/main/java/edu/gjoko/schedlr/config/AppFilter.java

Last change on this file was 77205be, checked in by gjoko kostadinov <gjokokostadinov@…>, 6 months ago

Add entire code

  • Property mode set to 100755
File size: 4.0 KB
Line 
1package edu.gjoko.schedlr.config;
2
3import edu.gjoko.schedlr.services.PostgresUserDetailsService;
4import lombok.RequiredArgsConstructor;
5import org.springframework.security.core.GrantedAuthority;
6import org.springframework.security.core.context.SecurityContextImpl;
7import org.springframework.security.core.userdetails.UserDetails;
8import org.springframework.util.StringUtils;
9import org.springframework.web.bind.annotation.RequestBody;
10import org.springframework.web.filter.GenericFilterBean;
11
12import javax.servlet.*;
13import javax.servlet.http.HttpServletRequest;
14import javax.servlet.http.HttpServletResponse;
15import javax.servlet.http.HttpSession;
16import java.io.IOException;
17import java.util.Collection;
18import java.util.HashMap;
19import java.util.Map;
20
21@RequiredArgsConstructor
22public class AppFilter extends GenericFilterBean {
23
24 private final PostgresUserDetailsService userDetailsService;
25 @Override
26 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
27 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
28 HttpSession session = httpServletRequest.getSession(false);
29 HttpServletResponse response = (HttpServletResponse) servletResponse;
30
31 if(httpServletRequest.getRequestURI().endsWith(".js")
32 || httpServletRequest.getRequestURI().endsWith(".css")) {
33 filterChain.doFilter(servletRequest, servletResponse);
34 return;
35 }
36
37 if(httpServletRequest.getRequestURI().startsWith("/api")) {
38 session = ((HttpServletRequest) servletRequest).getSession(true);
39 SecurityContextImpl sci = (SecurityContextImpl) session.getAttribute("SPRING_SECURITY_CONTEXT");
40
41 if(sci != null && session.getAttribute("stakeholderId") == null) {
42 UserDetails userDetails = (UserDetails) sci.getAuthentication().getPrincipal();
43 Long stakeholderId = userDetailsService.loadStakeholderId(userDetails.getUsername());
44 session.setAttribute("stakeholderId", stakeholderId);
45 }
46 filterChain.doFilter(servletRequest, servletResponse);
47 return;
48 }
49
50 if(session != null) {
51 SecurityContextImpl sci = (SecurityContextImpl) session.getAttribute("SPRING_SECURITY_CONTEXT");
52 if(sci != null) {
53 UserDetails userDetails = (UserDetails) sci.getAuthentication().getPrincipal();
54 Long stakeholderId = userDetailsService.loadStakeholderId(userDetails.getUsername());
55 session.setAttribute("stakeholderId", stakeholderId);
56
57 final Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities();
58 for (final GrantedAuthority grantedAuthority : authorities) {
59 String authorityName = grantedAuthority.getAuthority();
60 String page = "";
61 switch (authorityName) {
62 case "ADMIN":
63 page = "/admin";
64 break;
65 case "CUSTOMER":
66 if ("/customer_admin".equals(httpServletRequest.getRequestURI())) {
67 page = "/customer_admin";
68 } else {
69 page = "/homepage";
70 }
71 break;
72 case "BUSINESS_OWNER":
73 page = "/business_admin";
74 break;
75 default:
76 break;
77 }
78 if(page != null && !page.trim().isEmpty() && !DispatcherType.ERROR.equals(servletRequest.getDispatcherType())) {
79 servletRequest.getRequestDispatcher(page).forward(servletRequest, servletResponse);
80 return;
81 }
82 }
83 }
84 }
85 filterChain.doFilter(servletRequest, servletResponse);
86 }
87}
Note: See TracBrowser for help on using the repository browser.