• 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;
    }
    }
  • 相关阅读:
    第四章JAVA EE基础知识
    第二章代码审计环境搭建
    第三章代码审计辅助工具简介
    python json.dumps 中文需要注意的事项
    multiprocessing 使用实践
    Python中*args和**kwargs的使用实践
    python 继承学习记录
    关于vue-element-admin启动项目遇到的一些问题
    @RequestParam
    前端菜单点击切换样式,菜单控制iframe
  • 原文地址:https://www.cnblogs.com/gzhbk/p/12799836.html
Copyright © 2020-2023  润新知