ShiroSessionManager.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package com.ygj.yuemum.shiro;
  2. import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
  3. import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
  4. import org.apache.shiro.web.util.WebUtils;
  5. import org.springframework.util.StringUtils;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. import java.io.Serializable;
  9. /**
  10. * Description:shiro框架 自定义session获取方式
  11. * 可自定义session获取规则。这里采用ajax请求头authToken携带sessionId的方式
  12. *
  13. * @author zlp
  14. * @create 2018-05-24 10:04
  15. **/
  16. public class ShiroSessionManager extends DefaultWebSessionManager {
  17. private static final String AUTHORIZATION = "JSESSIONID";
  18. private static final String REFERENCED_SESSION_ID_SOURCE = "Stateless request";
  19. public ShiroSessionManager(){
  20. super();
  21. }
  22. @Override
  23. protected Serializable getSessionId(ServletRequest request, ServletResponse response){
  24. String id = WebUtils.toHttp(request).getHeader(AUTHORIZATION);
  25. if(StringUtils.isEmpty(id)){
  26. //如果没有携带id参数则按照父类的方式在cookie进行获取
  27. return super.getSessionId(request, response);
  28. }else{
  29. //如果请求头中有 authToken 则其值为sessionId
  30. request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,REFERENCED_SESSION_ID_SOURCE);
  31. request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID,id);
  32. request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID,Boolean.TRUE);
  33. return id;
  34. }
  35. }
  36. }