Date: 2026-07-29
Miner: security-pattern-miner (Rust)
Target: Spring Boot / Spring Security patterns on Maven
Data Root: ./build/volumes/data_java/
The initial mine of org.springframework.security:spring-security-core returned 21,800 raw entries but only 3 unique repos (spring-boot, quarkus, apereo/cas). This is expected: spring-security-core is an internal Spring module. Java applications depend on spring-boot-starter-security instead, which transitively pulls in spring-security-core.
In Python mining, the strategy was:
- Web framework:
fastapi(6,452 dependents) - Pattern-specific libs:
bcrypt,pyjwt,redis,itsdangerous - Mining: mutual dependents = fastapi ∩ pattern-lib
For Java/Spring Boot:
- Web framework equivalent:
org.springframework.boot:spring-boot-starter-security - Pattern-specific libs:
io.jsonwebtoken:jjwt-api,org.springframework.session:spring-session-data-redis, etc. - BCrypt is built-in to spring-security-crypto (included in starter-security), so password-based auth doesn't need a second package
| Package (Maven coordinate) | Pattern relevance | Expected yield |
|---|---|---|
org.springframework.boot:spring-boot-starter-security |
All patterns (primary pool) | High (thousands) |
io.jsonwebtoken:jjwt-api |
verifiable_token_authentication | Medium (popular JWT lib) |
org.springframework.session:spring-session-data-redis |
opaque_token + session_based_ac | Medium |
com.nimbusds:nimbus-jose-jwt |
verifiable_token_authentication (alt JWT) | Medium |
If spring-boot-starter-security yields too few repos, fallback candidates:
org.springframework.boot:spring-boot-starter-oauth2-resource-server(JWT/OAuth2)org.springframework.boot:spring-boot-starter-oauth2-client(OAuth2 login)org.springframework.security:spring-security-web(lower-level, but more direct dependents than core)
| Pattern | Dependencies (intersection) | Notes |
|---|---|---|
| password_based_authentication | spring-boot-starter-security alone | BCrypt is built-in; filter by grep for BCryptPasswordEncoder |
| verifiable_token_authentication | spring-boot-starter-security ∩ jjwt-api | Also grep for nimbus-jose-jwt in the main pool |
| opaque_token_authentication | spring-boot-starter-security ∩ spring-session-data-redis | |
| session_based_access_control | Same as opaque_token | Different recovery template (like Python approach) |
| obscure_token_access_control | spring-boot-starter-security alone | No standard Java API-key lib; filter by grep for API key patterns |
- Clone into
./build/volumes/data_java/cloned_repos/ - Use the Rust miner's
crawlsubcommand - Max concurrent clones: 4
Unlike Python's from fastapi.security import filter, for Java we apply pattern-specific grep filters on .java files.
import org.springframework.security
This confirms the repo actually uses Spring Security (not just declaring it as a transitive dependency).
BCryptPasswordEncoder— Spring's built-in password encoderPasswordEncoder— password encoder interfaceUserDetailsService— user lookup for authenticationDaoAuthenticationProvider— database-backed auth@PostMapping.*register\|signup— registration endpoints
JwtDecoder/JwtEncoder— Spring Security JWT supportJwts.builder\|Jwts.parser— jjwt library usageJWTVerifier\|JWTCreator— auth0 java-jwt usageOncePerRequestFilter.*jwt\|token— JWT filter chainsBearerTokenAuthenticationFilter— Spring OAuth2 resource server
@EnableRedisHttpSession— Spring Session with RedisSessionRepository— session storage abstractionOpaqueTokenIntrospector— Spring's opaque token supportHttpSession+setAttribute— servlet session management
ApiKey\|API_KEY\|api-key— API key patterns@RequestHeader.*[Aa]uthorization\|[Aa]pi.?[Kk]ey— header-based key extractionX-API-Key\|X-Api-Key— custom API key headers
@PreAuthorize\|@Secured\|@RolesAllowed— method-level authzhasRole\|hasAuthority\|hasPermission— Spring Security expressionsAccessDecisionManager\|AuthorizationManager— authz decision classesGrantedAuthority— role/permission model
Document in MiningLog.md:
- Dependents mined per package (unique count, pages fetched)
- Mutual dependents computed per pattern
- Clone success/failure counts
- Grep filter results: repos matching each pattern's keywords
- Final candidate counts per pattern
# docker-compose.yml change
volumes:
- ./build/volumes/data_java:/data # Separate from Python dataThis keeps Java repos completely isolated from the existing 459 Python repos in ./build/volumes/data/.