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相关推荐
- bboss session自定义session id生成机制介绍
bboss session自定义session id生成机制介绍 1.bboss session自定义session id生成接口 package org.frameworkset.security. ...
- 为tornado自定义session
cookie和session 在自定义session前,我们需要先了解cookie和session是什么,可以参考我之前的博客:http://blog.csdn.net/ayhan_huang/art ...
- java 重写session_关于session的实现:cookie与url重写
本文讨论的语境是java EE servlet. 我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能 ...
- java sessionstate_在Java Web开发中自定义Session
Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...
- java如何重写_java中如何重写一个方法
方法的重写: 1.在子类中可以根据需要对从基类中继承来的方法进行重写. 2.重写的方法和被重写的方法必须具有相同方法名称.参数列表和返回类型. 3.重写方法不能使用比被重写的方法更严格的访问权限. 在 ...
- 二十三、Java类中重载和重写的区别
@Author:Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
- java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...
- java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
目录 重载与重写的概念 重载与重写的区别 重载与重写的总结 构造器是否能被重写override 为什么函数不能根据返回类型来区分重载 重载与重写的概念 重载:同样一个方法可以根据输入参数列表的不同,做 ...
最新文章
- python如何调用文件_如何调用另一个python文件中的代码
- 中国 83 所高校上榜,清华位列第 15!QS 2021 年世界大学排名出炉
- java 调内存_java内存设置
- linux db2乱码,DB2乱码(开始和结束,字符串中间没有好的办法)
- php中设定一个全局异常处理。全局catch。默认catch。默认异常处理
- java实现8、10、16、2进制之间的相互转换(简单易懂实用快速)
- ETHREAD 结构体属性介绍
- nginx lua示例
- Linux基础8 bash的特性
- Gartner Q2服务器市场报告5大要点
- 乘法原理的例题和答案_吃透高考数学17个必考题型,基础再差也能考130!(内附解题技巧+例题解析)...
- etymology-I
- 485. 最大连续1的个数
- Windows server 2012体验之活动目录回收站
- python itchat模块登录失败_itchat模块的不明错误
- IT行业必须知道的基础知识
- js数组方法的返回值总结
- Android平台第三方插件开发指导(dcloud)
- git 本地仓添加多个远端仓库
- python爬虫 request+lxml爬取黄页88网企业信息
热门文章
- 通用智能传感集线器(Sensorhub)介绍
- 2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制
- 阿里云总裁张建锋:新型计算体系结构正在形成
- 信息如何实现病毒式传播?一文看懂Gossip协议
- 一切转型始于数据和模型 | 2020 MATLAB EXPO 中国线上用户大会:即将上线
- 云计算演进历程与模式 - 初识云计算知识专栏(2)
- php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据
- 电脑卡在正在启动windows界面_让 Linux 启动更快
- Elasticsearch7.15.2 安装、部署(linux环境)
- 第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入操作