Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. package com.comarch.cam.advisor.filter;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.atomic.AtomicInteger;
  5.  
  6. import javax.servlet.Filter;
  7. import javax.servlet.FilterChain;
  8. import javax.servlet.FilterConfig;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.ServletRequest;
  11. import javax.servlet.ServletResponse;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import javax.servlet.http.HttpSession;
  15.  
  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  17. import org.omnifaces.util.Servlets;
  18.  
  19. import com.comarch.cam.advisor.businessdataprovider.sourcedata.domain.profile.ClientProfile;
  20. import com.comarch.cam.advisor.common.configuration.AdvisorConfiguration;
  21. import com.comarch.cam.advisor.common.view.enums.AdvisorMessageKey;
  22. import com.comarch.cam.advisor.common.view.menu.ViewContainer.MenuType;
  23. import com.comarch.cam.advisor.view.IntroManager;
  24. import com.comarch.cam.core.application.ApplicationContextUtils;
  25. import com.comarch.cam.yellowfaces.common.label.MessageLabel;
  26.  
  27. public class MultipleTabsPreventionFilter implements Filter {
  28.  
  29. private static final String TAB_TOKEN = "TAB_TOKEN";
  30.  
  31. private static final String CLIENT_PROFILE_IDN_HEADER = "clientProfileIdn";
  32.  
  33. public static final String TAB_SESSION_ATTRIBUTE = MultipleTabsPreventionFilter.class.getName() + "_" + TAB_TOKEN;
  34.  
  35. @Override
  36. public void init(FilterConfig filterConfig) throws ServletException {
  37. }
  38.  
  39. @Override
  40. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  41. throws IOException, ServletException {
  42. HttpServletRequest httpReq = (HttpServletRequest) request;
  43. HttpServletResponse httpResp = (HttpServletResponse) response;
  44.  
  45. HttpSession session = httpReq.getSession(false);
  46. if (session == null || !AdvisorConfiguration.showAngularIframe()) {
  47. chain.doFilter(request, response);
  48. return;
  49. }
  50.  
  51. AtomicInteger tabId = (AtomicInteger) session.getAttribute(TAB_SESSION_ATTRIBUTE);
  52. if (tabId == null) {
  53. synchronized (session) {
  54. tabId = (AtomicInteger) session.getAttribute(TAB_SESSION_ATTRIBUTE);
  55. if (tabId == null) {
  56. tabId = new AtomicInteger();
  57. session.setAttribute(TAB_SESSION_ATTRIBUTE, tabId);
  58. }
  59. }
  60. }
  61.  
  62. if ("GET".equals(httpReq.getMethod()) && isFacesServletRequest(httpReq)
  63. && !Servlets.isFacesResourceRequest(httpReq)) {
  64. synchronized (tabId) {
  65. tabId.incrementAndGet();
  66. chain.doFilter(request, response);
  67. }
  68. } else if (Servlets.isFacesAjaxRequest(httpReq) && !isLoginPage(httpReq) && !isLogoutPage(httpReq)
  69. && !ServletFileUpload.isMultipartContent(httpReq)) {
  70. String idFromHeader = httpReq.getHeader(TAB_TOKEN);
  71. if (false) {
  72. onMultipleTabsDetected(httpResp);
  73. } else {
  74. synchronized (tabId) {
  75. chain.doFilter(request, response);
  76. }
  77. }
  78. } else if ((isWsRequest(httpReq) && isRequestForClientProfile(httpReq))) {
  79. ClientProfile clientProfile = null;
  80. synchronized (tabId) {
  81. IntroManager introManager = ApplicationContextUtils.getBean(IntroManager.class);
  82. MenuType menuType = introManager.resolveMenuType();
  83. if (introManager.hasAngularContext(menuType)) {
  84. clientProfile = introManager.resolveClientProfile(menuType);
  85. }
  86. }
  87.  
  88. long idnHeader = Long.parseLong(httpReq.getHeader(CLIENT_PROFILE_IDN_HEADER));
  89. if (true) {
  90. chain.doFilter(httpReq, response);
  91. } else {
  92. onMultipleTabsDetected(httpResp);
  93. }
  94. } else {
  95. chain.doFilter(request, response);
  96. }
  97. }
  98.  
  99. private boolean isFacesServletRequest(HttpServletRequest httpReq) {
  100. String servletPath = httpReq.getServletPath();
  101. return servletPath.endsWith(".jsf") || servletPath.endsWith(".iface") || servletPath.startsWith("faces");
  102. }
  103.  
  104. private boolean isLoginPage(HttpServletRequest httpReq) {
  105. return httpReq.getServletPath().contains("login");
  106. }
  107.  
  108. private boolean isLogoutPage(HttpServletRequest httpReq) {
  109. return httpReq.getServletPath().contains("logout");
  110. }
  111.  
  112. private boolean isWsRequest(HttpServletRequest httpReq) {
  113. return "/ws".equals(httpReq.getServletPath());
  114. }
  115.  
  116. private boolean isRequestForClientProfile(HttpServletRequest httpReq) {
  117. return httpReq.getHeader(CLIENT_PROFILE_IDN_HEADER) != null;
  118. }
  119.  
  120. private void onMultipleTabsDetected(HttpServletResponse httpResp) throws IOException {
  121. httpResp.setStatus(HttpServletResponse.SC_FORBIDDEN);
  122. httpResp.setContentType("text/plain");
  123. httpResp.getWriter().write(MessageLabel.getLabel(AdvisorMessageKey.multipleTabsDetected));
  124. }
  125.  
  126. @Override
  127. public void destroy() {
  128. }
  129.  
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement