SessionFilter.java 2.6 KB

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