{"id":26467445,"url":"https://github.com/wildfly-clustering/wildfly-clustering-spring","last_synced_at":"2025-07-17T01:32:56.153Z","repository":{"id":39741922,"uuid":"256256737","full_name":"wildfly-clustering/wildfly-clustering-spring","owner":"wildfly-clustering","description":"A SessionRepository implementation using WildFly's distributed session management","archived":false,"fork":false,"pushed_at":"2025-03-13T15:27:42.000Z","size":1132,"stargazers_count":4,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-13T16:33:14.233Z","etag":null,"topics":["clustering","infinispan","java","spring","spring-session","wildfly"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wildfly-clustering.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-16T15:34:03.000Z","updated_at":"2025-03-13T15:27:38.000Z","dependencies_parsed_at":"2023-11-17T14:36:51.303Z","dependency_job_id":"8de940c5-462e-419b-99f8-1ceca020cd8d","html_url":"https://github.com/wildfly-clustering/wildfly-clustering-spring","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wildfly-clustering%2Fwildfly-clustering-spring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wildfly-clustering%2Fwildfly-clustering-spring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wildfly-clustering%2Fwildfly-clustering-spring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wildfly-clustering%2Fwildfly-clustering-spring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wildfly-clustering","download_url":"https://codeload.github.com/wildfly-clustering/wildfly-clustering-spring/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244448132,"owners_count":20454443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clustering","infinispan","java","spring","spring-session","wildfly"],"created_at":"2025-03-19T14:41:53.513Z","updated_at":"2025-03-19T14:41:54.049Z","avatar_url":"https://github.com/wildfly-clustering.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Version](https://img.shields.io/maven-central/v/org.wildfly.clustering/wildfly-clustering-spring?style=for-the-badge\u0026logo=redhat\u0026logoColor=ee0000\u0026label=latest)](https://search.maven.org/artifact/org.wildfly.clustering/wildfly-clustering-spring)\n[![License](https://img.shields.io/github/license/wildfly-clustering/wildfly-clustering-spring?style=for-the-badge\u0026color=darkgreen\u0026logo=apache\u0026logoColor=d22128)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Project Chat](https://img.shields.io/badge/zulip-chat-lightblue.svg?style=for-the-badge\u0026logo=zulip\u0026logoColor=ffffff)](https://wildfly.zulipchat.com/#narrow/stream/wildfly-clustering)\n\n# wildfly-clustering-spring\n\nwildfly-clustering-spring is a set of Spring modules providing distributed session management for Spring Session and Spring Flux using Infinispan.\nThis brings the same clustering features of WildFly's distributed session managers to the Spring ecosystem, including:\n\n* Servlet 6.0 specification compliance (excluding [limitations inherent to Spring Session and Spring Web](#notes)).\n  * Including support for standard session event notifications\n* Session attribute replication via an embedded cache or persistence to a remote Infinispan cluster.\n* Configurable session replication/persistence strategies, i.e. per session vs per attribute.\n* Similar semantics to that of an in-memory session repository, including a high level of consistency under concurrent request access, and support for mutable session attributes.\n* Ability to limit the number of active sessions to retain in local memory\n* Configurable session attribute marshallers.\n\n## Building\n\n1.\tClone this repository.\n\n\t\t$ git clone git@github.com:wildfly-clustering/wildfly-clustering-spring.git\n\t\t$ cd wildfly-clustering-spring\n\n1.\tBuild using Java 17 or higher and Apache Maven 3.8.x or higher.\n\n\t\t$ mvn clean install\n\n## Modules\n\n* [Spring Session](session/README.md), providing traditional HttpSession management for use with Jakarta Servlet applications and Spring MVC.\n* [Spring Web](web/README.md), providing reactive WebSession management for use with Spring Flux.\n\n## Notes\n\nBecause Spring Session and Spring Web operate entirely within user/application space (i.e. external to a servlet container's native session manager), its session management behavior will inherently deviate from the Jakarta Servlet specification in several areas.\nIn particular, applications using Spring Session or Spring Web should be aware of the following aberrant behavior that affects *every* SessionRepository/WebSessionManager implementation:\n\n1.\t`ServletContext` methods affecting session behavior, e.g. [`ServletContext.setSessionTimeout(int)`](https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/servletcontext#setSessionTimeout(int)), do not propagate to the `SessionRepository` or `WebSessionManager` implementation and thus will not affect runtime behavior.\n\n1.\tSpring Session and Spring Web lack any facility to notify standard listeners (instances of `HttpSessionListener` declared in web.xml or annotated with @WebListener) of newly created or destroyed sessions.\n\tUsers must instead rely on Spring's own event mechanism.\n\n1.\tSpring Session and Spring Web lack any facility to notify standard listeners (instances of `HttpSessionAttributeListener` declared in web.xml or annotated with @WebListener) of new, replaced and removed session attributes.\n\tSpring has no mechanism for triggering these events.\n\n1.\tSpring Session and Spring Web lack any facility to notify standard listeners (instances of `HttpSessionIdListener` declared in web.xml or annotated with @WebListener) of session identifier changes resulting from `HttpServletRequest.changeSessionId()`.\n\tUsers must instead rely on Spring's own event mechanism.\n\n1.\tApplications using Spring Session or Spring Web will generally need to rely on Spring Security for authentication and authorization.\n\tMany authentication mechanisms store user identity in the `HttpSession` or will need to change the session ID following authentication - a common practice for preventing session fixation attacks.\n\tSince the servlet container has no access to sessions created by Spring, most container managed security mechanisms will not work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwildfly-clustering%2Fwildfly-clustering-spring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwildfly-clustering%2Fwildfly-clustering-spring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwildfly-clustering%2Fwildfly-clustering-spring/lists"}