SessionFilter.java 2.9 KB

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