{"adoption": {"forks": 568, "observed_at": "2026-08-28T04:03:52.714039+00:00", "stars": 1177}, "canonical_url": "https://ross.abutalabs.com/products/oauth2-demo", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Re：从零开始的Spring Security Oauth2", "domain": ["security", "web-development", "developer-tools", "tutorials"], "enriched": true, "function": ["auth", "authorization", "security"], "health_score": 20, "homepage": null, "language": "Java", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["lexburner/oauth2-demo"], "name": "lexburner/oauth2-demo", "platform": ["jvm"], "pushed_at": "2021-12-30T07:18:58+00:00", "repo": "lexburner/oauth2-demo", "stars": 1177, "tags": ["oauth2", "spring-security", "spring-boot", "demo", "tutorial", "authorization-code-flow", "spring"], "topics": [], "urls": [], "use_cases": ["learn how oauth2 authorization code flow works in spring security", "example of spring security oauth2 configuration", "migrate spring security oauth2 to spring boot 2.0", "understand oauth2 filter chains in spring", "demo of getting access token with authorization code", "set up password encoder in spring boot 2 security"], "what_it_is": "A Java demo project and tutorial explaining how to implement OAuth2 with Spring Security OAuth2, including authorization code flow examples and Spring Boot 2.0 migration guidance. It serves as a hands-on learning resource for developers integrating OAuth2 authentication in Spring applications.", "when_to_avoid": ["you need a production-ready OAuth2 server or client", "you use modern Spring Boot 3 / Spring Authorization Server", "you need maintained, licensed software with active support"], "when_to_choose": ["you are learning OAuth2 concepts with Spring Security from scratch", "you need a working demo of the authorization code flow", "you are migrating a Spring Security OAuth2 app to Spring Boot 2.0"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/oauth2-demo", "repo": "lexburner/oauth2-demo", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:52.714039+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:26:12.348465+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "75a3d1bfbce04a6929f0eb5d47ea72de7f353c7879007d262fffea364ae54dbd", "fetched_at": "2026-08-28T04:03:52.714039+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lexburner/oauth2-demo"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3312, "days_push": 1707, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}