{"adoption": {"forks": 125, "observed_at": "2026-08-28T04:04:35.294708+00:00", "stars": 1388}, "canonical_url": "https://ross.abutalabs.com/products/javasecuritylearning", "card": {"archived": false, "artifact_type": "learning-resource", "description": "记录一下 Java 安全学习历程，也算是半条学习路线了", "domain": ["security", "tutorials", "education", "developer-tools"], "enriched": true, "function": ["security", "developer-tools"], "health_score": 37, "homepage": null, "language": "Java", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["Drun1baby/JavaSecurityLearning"], "name": "Drun1baby/JavaSecurityLearning", "platform": ["jvm", "cross-platform"], "pushed_at": "2025-06-26T02:47:43+00:00", "repo": "Drun1baby/JavaSecurityLearning", "stars": 1388, "tags": ["java-security", "deserialization", "vulnerability-research", "learning-path", "penetration-testing", "chinese-language"], "topics": ["java"], "urls": [], "use_cases": ["learn java security from scratch", "understand java deserialization vulnerabilities", "study commons collections gadget chains", "learn shiro 550 and 721 exploitation", "find a structured java security learning path", "get sample code for vulnerability debugging"], "what_it_is": "A curated learning roadmap and notes repository for Java security, covering Java deserialization vulnerabilities, Commons Collections gadget chains, Shiro exploits, RMI, and related topics. It includes blog articles and sample code for reproducing and debugging vulnerabilities.", "when_to_avoid": ["you need production security tooling rather than educational material", "you want content in English (the material is primarily in Chinese)", "you are looking for a general Java programming tutorial unrelated to security"], "when_to_choose": ["you want a structured, step-by-step path into Java security", "you need detailed writeups on CC chains and Shiro vulnerabilities", "you prefer learning with accompanying blog posts and runnable code"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/javasecuritylearning", "repo": "Drun1baby/JavaSecurityLearning", "role": "main", "score": 45}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "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:04:35.294708+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:35.294708+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:39:45.155107+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57ebdd28ceab1a006fb1863b88597ff23e60b1afe2913afad1c3643cb32ec518", "fetched_at": "2026-08-28T04:04:35.294708+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Drun1baby/JavaSecurityLearning"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 28, "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": 1514, "days_push": 433, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 45, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}