日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 重写session_使用Shiro重写Session 自定义SESSION

發布時間:2024/9/27 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 重写session_使用Shiro重写Session 自定义SESSION 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引入shiro的jar包

1.2.3

org.apache.shiro

shiro-core

${shiroVersion}

org.apache.shiro

shiro-web

${shiroVersion}

org.apache.shiro

shiro-ehcache

${shiroVersion}

org.apache.shiro

shiro-spring

${shiroVersion}

配置shiro(web.xml)

shiroFilter

org.springframework.web.filter.DelegatingFilterProxy

targetFilterLifecycle

true

shiroFilter

*.html

配置shiro(spring)

具體類用法

package?com.whereta.model;

import?org.apache.shiro.cache.Cache;

import?org.apache.shiro.cache.CacheException;

import?org.apache.shiro.session.Session;

import?java.io.Serializable;

import?java.util.Collection;

import?java.util.HashMap;

import?java.util.Map;

import?java.util.Set;

/**

*?該類是緩存工具類,提供session的存儲和獲取等方法

*?@author?Vincent

*?@time?2015/7/27?15:00

*/

public?class?DemoCache?implements?Cache?{

//模擬緩存存儲session對象

private?static?final?Map?map?=?new?HashMap();

public?Session?get(Serializable?key)?throws?CacheException?{

//根據key獲取緩存中的session

return?map.get(key);

}

public?Session?put(Serializable?key,?Session?value)?throws?CacheException?{

//將session對象存入緩存

map.put(key,?value);

return?value;

}

public?Session?remove(Serializable?key)?throws?CacheException?{

//移除session中為key的對象

Session?session?=?get(key);

if?(session?!=?null)?{

session.setAttribute(key,?null);

return?session;

}

return?null;

}

public?void?clear()?throws?CacheException?{

//清除所有的session

map.clear();

}

public?int?size()?{

//返回session的數量

return?map.size();

}

public?Set?keys()?{

//返回所有session的key

return?map.keySet();

}

public?Collection?values()?{

//返回所有session

return?map.values();

}

}

package?com.whereta.model;

import?org.apache.shiro.session.Session;

import?org.apache.shiro.session.mgt.eis.SessionIdGenerator;

import?java.io.Serializable;

/**

*?sessionId生成工具類

*?@author?Vincent

*?@time?2015/7/27?11:45

*/

public?class?DemoSessionIdGenerator?implements?SessionIdGenerator?{

public?Serializable?generateId(Session?session)?{

//自定義規則生成sessionid

return?System.currentTimeMillis();

}

}

package?com.whereta.model;

import?org.apache.commons.logging.Log;

import?org.apache.commons.logging.LogFactory;

import?org.apache.shiro.session.Session;

import?org.apache.shiro.session.mgt.SessionContext;

import?org.apache.shiro.web.servlet.ShiroHttpServletRequest;

import?org.apache.shiro.web.session.mgt.DefaultWebSessionManager;

import?org.apache.shiro.web.util.WebUtils;

import?javax.servlet.ServletRequest;

import?javax.servlet.ServletResponse;

import?javax.servlet.http.HttpServletRequest;

import?java.io.Serializable;

import?java.util.HashMap;

import?java.util.Map;

/**

*?集成websession管理器,重寫兩個方法實現自己的需求

*?@author?Vincent

*?@time?2015/7/27?15:35

*/

public?class?DemoSessionManager?extends?DefaultWebSessionManager?{

//自定義緩存,存儲??客戶端-sessionid

public?static?final?Map?MAP=new?HashMap();

private?static?Log?log?=?LogFactory.getLog(DemoSessionManager.class);

@Override

protected?Serializable?getSessionId(ServletRequest?request,?ServletResponse?response)?{

HttpServletRequest?req=?(HttpServletRequest)?request;

//假設以請求地址為key標注唯一一個客戶端

String?remoteHost?=?req.getRemoteHost();

//存入緩存

Serializable?id?=?MAP.get(remoteHost);

return?id;

}

@Override

protected?void?onStart(Session?session,?SessionContext?context)?{

//判斷是否是http請求

if?(!WebUtils.isHttp(context))?{

log.debug("SessionContext?argument?is?not?HTTP?compatible?or?does?not?have?an?HTTP?request/response?"?+

"pair.?No?session?ID?cookie?will?be?set.");

return;

}

HttpServletRequest?request?=?WebUtils.getHttpRequest(context);

request.removeAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE);

request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_IS_NEW,?Boolean.TRUE);

String?remoteHost?=?request.getRemoteHost();

Serializable?id?=?session.getId();

MAP.put(remoteHost,id);

}

}

通過以上配置,可以再次運行查看session,已經變為shiro的自定義session了

org.apache.shiro.web.servlet.ShiroHttpSession

總結

以上是生活随笔為你收集整理的java 重写session_使用Shiro重写Session 自定义SESSION的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。