{"id":18076620,"url":"https://github.com/ggeorgovassilis/client-driven-workflows","last_synced_at":"2026-05-07T05:31:29.292Z","repository":{"id":152469468,"uuid":"65396896","full_name":"ggeorgovassilis/client-driven-workflows","owner":"ggeorgovassilis","description":null,"archived":false,"fork":false,"pushed_at":"2017-02-25T16:08:06.000Z","size":30,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-28T22:43:08.112Z","etag":null,"topics":["jwt","rest","security","spring"],"latest_commit_sha":null,"homepage":null,"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/ggeorgovassilis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-10T16:07:38.000Z","updated_at":"2018-03-21T11:17:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a31dc00-ad2a-4249-952a-e5c9081737da","html_url":"https://github.com/ggeorgovassilis/client-driven-workflows","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ggeorgovassilis/client-driven-workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggeorgovassilis%2Fclient-driven-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggeorgovassilis%2Fclient-driven-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggeorgovassilis%2Fclient-driven-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggeorgovassilis%2Fclient-driven-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ggeorgovassilis","download_url":"https://codeload.github.com/ggeorgovassilis/client-driven-workflows/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ggeorgovassilis%2Fclient-driven-workflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32724452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["jwt","rest","security","spring"],"created_at":"2024-10-31T11:10:39.073Z","updated_at":"2026-05-07T05:31:29.270Z","avatar_url":"https://github.com/ggeorgovassilis.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# client driven workflows\r\n\r\nJava/Spring example project for the concepts presented in [Scalability through client-driven workflows](https://blog.georgovassilis.com/2016/08/scalability-through-client-driven.html).\r\n\r\nThe example code is a Java web application which demonstrates a simple expense claim form and consists of:\r\n- HRService which authenticates users by email and password and returns a digitally signed document with the users credentials\r\n- ERPService which accepts user credentials issued by HRService and returns a digitally signed document with the cost centers\r\nthe user can charge expenses to\r\n- PayrollService which accepts an expense claim with the user credentials and cost center as an attachment and returns a digitally\r\nsigned document which contains the expense claim receipt\r\n- a Spring aspect called DocumentSigningAspec which decorates the three aforementioned services and validates that all arguments\r\npassed to them have valid signatures. It furthermore signs documents which the services return.\r\nAll services expose REST APIs.\r\n\r\nThe code is meant to run with the provided unit tests and not as a stand alone application in a servlet container.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fggeorgovassilis%2Fclient-driven-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fggeorgovassilis%2Fclient-driven-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fggeorgovassilis%2Fclient-driven-workflows/lists"}