引入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相关推荐

  1. bboss session自定义session id生成机制介绍

    bboss session自定义session id生成机制介绍 1.bboss session自定义session id生成接口 package org.frameworkset.security. ...

  2. 为tornado自定义session

    cookie和session 在自定义session前,我们需要先了解cookie和session是什么,可以参考我之前的博客:http://blog.csdn.net/ayhan_huang/art ...

  3. java 重写session_关于session的实现:cookie与url重写

    本文讨论的语境是java EE servlet. 我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能 ...

  4. java sessionstate_在Java Web开发中自定义Session

    Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...

  5. java如何重写_java中如何重写一个方法

    方法的重写: 1.在子类中可以根据需要对从基类中继承来的方法进行重写. 2.重写的方法和被重写的方法必须具有相同方法名称.参数列表和返回类型. 3.重写方法不能使用比被重写的方法更严格的访问权限. 在 ...

  6. 二十三、Java类中重载和重写的区别

    @Author:Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...

  7. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  8. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解

    前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...

  9. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

    目录 重载与重写的概念 重载与重写的区别 重载与重写的总结 构造器是否能被重写override 为什么函数不能根据返回类型来区分重载 重载与重写的概念 重载:同样一个方法可以根据输入参数列表的不同,做 ...

最新文章

  1. python如何调用文件_如何调用另一个python文件中的代码
  2. 中国 83 所高校上榜,清华位列第 15!QS 2021 年世界大学排名出炉
  3. java 调内存_java内存设置
  4. linux db2乱码,DB2乱码(开始和结束,字符串中间没有好的办法)
  5. php中设定一个全局异常处理。全局catch。默认catch。默认异常处理
  6. java实现8、10、16、2进制之间的相互转换(简单易懂实用快速)
  7. ETHREAD 结构体属性介绍
  8. nginx lua示例
  9. Linux基础8 bash的特性
  10. Gartner Q2服务器市场报告5大要点
  11. 乘法原理的例题和答案_吃透高考数学17个必考题型,基础再差也能考130!(内附解题技巧+例题解析)...
  12. etymology-I
  13. 485. 最大连续1的个数
  14. Windows server 2012体验之活动目录回收站
  15. python itchat模块登录失败_itchat模块的不明错误
  16. IT行业必须知道的基础知识
  17. js数组方法的返回值总结
  18. Android平台第三方插件开发指导(dcloud)
  19. git 本地仓添加多个远端仓库
  20. python爬虫 request+lxml爬取黄页88网企业信息

热门文章

  1. 通用智能传感集线器(Sensorhub)介绍
  2. 2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制
  3. 阿里云总裁张建锋:新型计算体系结构正在形成
  4. 信息如何实现病毒式传播?一文看懂Gossip协议
  5. 一切转型始于数据和模型 | 2020 MATLAB EXPO 中国线上用户大会:即将上线
  6. 云计算演进历程与模式 - 初识云计算知识专栏(2)
  7. php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据
  8. 电脑卡在正在启动windows界面_让 Linux 启动更快
  9. Elasticsearch7.15.2 安装、部署(linux环境)
  10. 第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入操作