Onepiece.x Session-Share

session share 通常的做法 放入redis/memcached/jdbc/hazelcast等 我的做法是 把session的所有数据通过AES对称加密 放入cookie中 我使用cookie来存放session的所有数据 思想来源于ninjaframework 的 session实现

Лицензия

Лицензия

Группа

Группа

com.github.onepiecex
Идентификатор

Идентификатор

onepiecex-session-share
Последняя версия

Последняя версия

1.65
Дата

Дата

Тип

Тип

pom
Описание

Описание

Onepiece.x Session-Share
session share 通常的做法 放入redis/memcached/jdbc/hazelcast等 我的做法是 把session的所有数据通过AES对称加密 放入cookie中 我使用cookie来存放session的所有数据 思想来源于ninjaframework 的 session实现
Ссылка на сайт

Ссылка на сайт

https://github.com/onepiecex/session-share
Система контроля версий

Система контроля версий

https://github.com/onepiecex/session-share

Скачать onepiecex-session-share

Имя Файла Размер
onepiecex-session-share-1.65.pom 8 KB
Обзор

Как подключить последнюю версию

<!-- https://jarcasting.com/artifacts/com.github.onepiecex/onepiecex-session-share/ -->
<dependency>
    <groupId>com.github.onepiecex</groupId>
    <artifactId>onepiecex-session-share</artifactId>
    <version>1.65</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/com.github.onepiecex/onepiecex-session-share/
implementation 'com.github.onepiecex:onepiecex-session-share:1.65'
// https://jarcasting.com/artifacts/com.github.onepiecex/onepiecex-session-share/
implementation ("com.github.onepiecex:onepiecex-session-share:1.65")
'com.github.onepiecex:onepiecex-session-share:pom:1.65'
<dependency org="com.github.onepiecex" name="onepiecex-session-share" rev="1.65">
  <artifact name="onepiecex-session-share" type="pom" />
</dependency>
@Grapes(
@Grab(group='com.github.onepiecex', module='onepiecex-session-share', version='1.65')
)
libraryDependencies += "com.github.onepiecex" % "onepiecex-session-share" % "1.65"
[com.github.onepiecex/onepiecex-session-share "1.65"]

Зависимости

Библиотека не имеет зависимостей. Это самодостаточное приложение, которое не зависит ни от каких других библиотек.

Модули Проекта

  • session-share-core
  • session-share-spring-boot-starter

session-share

session 共享 通常的做法 放入redis/memcached/jdbc/hazelcast等

我的做法是 把session的所有数据通过AES对称加密 放入cookie中 我使用cookie来存放session的所有数据

session里不应该存放大数据, 建议只存放一些简单的ID

思想来源于ninjaframework 的 session实现

基于servlet-3.1

参考 spring-session的设计思路

  • 加入一个filter

  • 利用HttpServletRequestWrapper, 实现自己的 getSession()方法 接管创建和管理Session数据的工作

  • 利用HttpServletResponseWrapper 进行session数据的 save操作

  • client request -> filter -> decrypt cookie to session

  • response close(send or flush) -> encrypt session data to cookie

使用

spring-boot

<dependency>
    <groupId>com.github.onepiecex</groupId>
    <artifactId>onepiecex-session-share-spring-boot-starter</artifactId>
    <version>1.65</version>
</dependency>

配置(application.yaml)

session :
  # session cookie 的名称前缀
  prefix : prefix_cookie
  #设置为true 之后 js脚本将无法读取到cookie信息
  http_only : false
  #设置为true 之后 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证
  transferred_over_https_only : false
  # 过期时间
  expire_time_in_seconds : 86400
  # domain
  domain : localhost
  # 加密密钥
  secret : eti8KrqgL2VYtizjeti8KrqgL2VYtizj
@GetMapping
public Map<String,String> login(Session session){
    session.setAttribute("uid", RandomUtils.nextInt());
    Integer uid = session.getAttribute("uid",Integer.class);
    return session.getData();
}

Session Interface

public interface Session extends HttpSession {
    String getString(String name);
    
    <T> T getAttribute(String name,Class<T> cls);
    
    <T> T getValue(String name,Class<T> cls);
    
    Map<String,String> getData();
}

解密

String data = CookieEncryption.getInstance(secret).decrypt(data)
Map<String, String> sessionData = new HashMap();
CookieDataCodec.decode(sessionData,data);

其他框架

<dependency>
  <groupId>com.github.onepiecex</groupId>
  <artifactId>onepiecex-session-share-core</artifactId>
  <version>1.65</version>
</dependency>

自行加入Filter

SessionShareRequestWrapper requestWrapper = new SessionShareRequestWrapper(request,springSessionConfig);
SessionShareResponseWrapper responseWrapper = new SessionShareResponseWrapper(response,requestWrapper);
chain.doFilter(requestWrapper,responseWrapper);

License

Copyright (C) 2017 onepiece.x, Inc.

This work is licensed under the Apache License, Version 2.0. See LICENSE for details.

com.github.onepiecex

Версии библиотеки

Версия
1.65
1.64
1.63
1.61
1.6
1.5