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

Last change on this file since 950fa0d was 950fa0d, checked in by Gjoko Kostadinov <gjoko.kostadinov@…>, 14 months ago

Periodic update

  • Property mode set to 100644
File size: 3.8 KB
RevLine 
[cf9cdbf]1package edu.gjoko.schedlr.config;
2
[8bcd64c]3import edu.gjoko.schedlr.services.PostgresUserDetailsService;
4import lombok.RequiredArgsConstructor;
[cf9cdbf]5import org.springframework.security.core.GrantedAuthority;
6import org.springframework.security.core.context.SecurityContextImpl;
7import org.springframework.security.core.userdetails.UserDetails;
[46fd0c7]8import org.springframework.util.StringUtils;
[8bcd64c]9import org.springframework.web.bind.annotation.RequestBody;
[cf9cdbf]10import org.springframework.web.filter.GenericFilterBean;
11
[950fa0d]12import javax.servlet.*;
[cf9cdbf]13import javax.servlet.http.HttpServletRequest;
[8bcd64c]14import javax.servlet.http.HttpServletResponse;
[cf9cdbf]15import javax.servlet.http.HttpSession;
16import java.io.IOException;
17import java.util.Collection;
18import java.util.HashMap;
19import java.util.Map;
20
[8bcd64c]21@RequiredArgsConstructor
[cf9cdbf]22public class AppFilter extends GenericFilterBean {
[8bcd64c]23
24 private final PostgresUserDetailsService userDetailsService;
[cf9cdbf]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);
[8bcd64c]29 HttpServletResponse response = (HttpServletResponse) servletResponse;
[cf9cdbf]30
[9050790]31 if(httpServletRequest.getRequestURI().endsWith(".js")
[8bcd64c]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 }
[46fd0c7]46 filterChain.doFilter(servletRequest, servletResponse);
47 return;
48 }
[8bcd64c]49
[cf9cdbf]50 if(session != null) {
51 SecurityContextImpl sci = (SecurityContextImpl) session.getAttribute("SPRING_SECURITY_CONTEXT");
52 if(sci != null) {
53 UserDetails userDetails = (UserDetails) sci.getAuthentication().getPrincipal();
[8bcd64c]54 Long stakeholderId = userDetailsService.loadStakeholderId(userDetails.getUsername());
55 session.setAttribute("stakeholderId", stakeholderId);
56
[cf9cdbf]57 final Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities();
58 for (final GrantedAuthority grantedAuthority : authorities) {
59 String authorityName = grantedAuthority.getAuthority();
[46fd0c7]60 String page = "";
61 switch (authorityName) {
62 case "ADMIN":
63 page = "/admin";
64 break;
65 case "CUSTOMER":
66 page = "/homepage";
67 break;
[8bcd64c]68 case "BUSINESS_OWNER":
69 page = "/business_admin";
70 break;
[46fd0c7]71 default:
72 break;
73 }
[950fa0d]74 if(page != null && !page.trim().isEmpty() && !DispatcherType.ERROR.equals(servletRequest.getDispatcherType())) {
[46fd0c7]75 servletRequest.getRequestDispatcher(page).forward(servletRequest, servletResponse);
[cf9cdbf]76 return;
77 }
78 }
79 }
80 }
81 filterChain.doFilter(servletRequest, servletResponse);
82 }
83}
Note: See TracBrowser for help on using the repository browser.