com.github.onepiecex:onepiecex-session-share-core

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

License

License

GroupId

GroupId

com.github.onepiecex
ArtifactId

ArtifactId

onepiecex-session-share-core
Last Version

Last Version

1.61
Release Date

Release Date

Type

Type

jar
Description

Description

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

Download onepiecex-session-share-core

How to add to project

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

Dependencies

compile (6)

Group / Artifact Type Version
javax.servlet : javax.servlet-api jar 3.1.0
commons-codec : commons-codec jar 1.9
org.slf4j : slf4j-api jar 1.7.25
com.fasterxml.jackson.core : jackson-core jar 2.8.8
com.fasterxml.jackson.core : jackson-databind jar 2.8.8
com.google.guava : guava jar 22.0

Project Modules

There are no modules declared in this project.

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

Versions

Version
1.61
1.6
1.5
1.4
1.3
1.2
1.1
1.0