zoukankan      html  css  js  c++  java
  • StatelessSessionManager重写

    package com.foen.security;

    import org.apache.shiro.session.mgt.SessionKey;
    import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
    import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
    import org.apache.shiro.web.util.WebUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.Serializable;
    import java.util.UUID;

    /**
    * 重写这个方法
    * @auther: 作者 gzh
    * @description: 类说明
    * @Date: created in 16:47 2020/4/28
    */
    public class StatelessSessionManager extends DefaultWebSessionManager {

    /**
    * 这个是服务端要返回给客户端,
    */
    public final static String TOKEN_NAME = "TOKEN";
    /**
    * 这个是客户端请求给服务端带的header
    */
    public final static String HEADER_TOKEN_NAME = "token";

    private static final Logger logger = LoggerFactory.getLogger(StatelessSessionManager.class);

    /**
    *
    * @param key
    * @return Serializable
    */
    @Override
    public Serializable getSessionId(SessionKey key) {
    Serializable sessionId = key.getSessionId();
    if(sessionId == null){
    HttpServletRequest request = WebUtils.getHttpRequest(key);
    HttpServletResponse response = WebUtils.getHttpResponse(key);
    sessionId = this.getSessionId(request,response);
    }
    HttpServletRequest request = WebUtils.getHttpRequest(key);
    request.setAttribute(TOKEN_NAME,sessionId.toString());
    return sessionId;
    }

    /**
    * 取数据getSessionId
    * @param servletRequest
    * @param servletResponse
    * @return Serializable
    */
    @Override
    public Serializable getSessionId(ServletRequest servletRequest, ServletResponse servletResponse) {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    String token = request.getHeader(HEADER_TOKEN_NAME);
    if(token == null){
    token = UUID.randomUUID().toString();
    }

    //这段代码还没有去查看其作用,但是这是其父类中所拥有的代码,重写完后我复制了过来...开始
    request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,
    ShiroHttpServletRequest.COOKIE_SESSION_ID_SOURCE);
    request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, token);
    request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);
    request.setAttribute(ShiroHttpServletRequest.SESSION_ID_URL_REWRITING_ENABLED, isSessionIdUrlRewritingEnabled());
    //这段代码还没有去查看其作用,但是这是其父类中所拥有的代码,重写完后我复制了过来...结束

    logger.info("=============>token:"+token);
    return token;
    }
    }
  • 相关阅读:
    1-4个人博客
    大二上学期软件工程概论学习进度表(第十六周)
    软件工程概论个人总结
    python+selenium 定位元素的主要方法
    python+selenium 元素定位--iframe
    返回字符串中出现最多的字符
    TestNG中 ITestListener 的使用
    对数组对象按某些属性排序方法
    OSX 10.11 cocoapods安装命令: sudo gem install -n /usr/local/bin cocoapods
    IOS启动页设置适应ios8/9
  • 原文地址:https://www.cnblogs.com/gzhbk/p/12799836.html
Copyright © 2011-2022 走看看