SessionFilter.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.yingying.tourist.request;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.yingying.tourist.business.BusinessConstant;
  4. import com.yingying.tourist.business.BusinessYml;
  5. import com.yingying.tourist.common.UrlUtils;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.springframework.core.annotation.Order;
  9. import org.springframework.stereotype.Component;
  10. import org.springframework.web.util.WebUtils;
  11. import javax.annotation.Resource;
  12. import javax.servlet.*;
  13. import javax.servlet.annotation.WebFilter;
  14. import javax.servlet.http.Cookie;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.io.IOException;
  18. import java.util.UUID;
  19. @Component
  20. @Order(2)
  21. @WebFilter(filterName = "SessionFilter", urlPatterns = "/*")
  22. @Slf4j
  23. public class SessionFilter implements Filter {
  24. @Resource
  25. private BusinessYml businessYml;
  26. @Override
  27. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  28. // 检查sessionId的cookie是否存在,不存在即为新连接,需要初始化sessionId到cookie中
  29. checkRemoteSession((HttpServletRequest) request, (HttpServletResponse) response);
  30. chain.doFilter(request, response);
  31. }
  32. @Override
  33. public void destroy() {
  34. }
  35. @Override
  36. public void init(FilterConfig filterConfig) throws ServletException {
  37. }
  38. private void checkRemoteSession(HttpServletRequest request, HttpServletResponse response) {
  39. String sessionKey = null;
  40. String token = request.getParameter("token");
  41. log.info("token------>>>first:[{}]",token);
  42. if (StringUtils.isEmpty(token)) {
  43. String payload = UrlUtils.getRequestPayload(request);
  44. if (!StringUtils.isEmpty(payload)) {
  45. JSONObject jsonObject = JSONObject.parseObject(payload);
  46. token = jsonObject.getString("token");
  47. }
  48. }
  49. if (StringUtils.isNotEmpty(token)) {
  50. sessionKey = token;
  51. log.info("sessionKey------>>>second:[{}]",sessionKey);
  52. } else {
  53. Cookie sessionKeyCookie = WebUtils.getCookie(request, SessionAuthorization.SESSION_KEY_COOKIE_NAME);
  54. if (sessionKeyCookie == null) {
  55. sessionKey = UUID.randomUUID().toString();
  56. sessionKeyCookie = new Cookie(SessionAuthorization.SESSION_KEY_COOKIE_NAME, sessionKey);
  57. } else {
  58. sessionKey = sessionKeyCookie.getValue();
  59. }
  60. log.info("sessionKey------>>>third:[{}]",sessionKey);
  61. sessionKeyCookie.setPath("/");
  62. sessionKeyCookie.setDomain(businessYml.getCookieDomain());
  63. sessionKeyCookie.setMaxAge(SessionAuthorization.DEFAULT_SESSION_COOKIE_EXPIRE);
  64. sessionKeyCookie.setHttpOnly(true);
  65. response.addCookie(sessionKeyCookie);
  66. }
  67. RequestSessionKey.putSessionKey(sessionKey);
  68. }
  69. }