Working with Security

1. Understanding Java Security Architecture

ComponentRole
Class verifierBytecode safety
JCA / JCECryptography APIs
JAASAuthentication / authorization
Security ManagerDeprecated for removal (Java 17+)

2. Using SecurityManager

AspectDetail
StatusDeprecated for removal in Java 17+ (JEP 411)
AlternativesOS-level sandboxing, containers, modules

3. Working with Cryptography (JCA)

Example: Symmetric encryption

KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256);
SecretKey key = kg.generateKey();

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
byte[] iv = new byte[12];
SecureRandom.getInstanceStrong().nextBytes(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] cipherText = cipher.doFinal(plainBytes);
ClassUse
CipherEncryption/decryption
KeyGenerator / KeyPairGeneratorKey creation
MessageDigestHash (SHA-256)
MacHMAC
SecureRandomCSPRNG

4. Hashing Passwords

AlgorithmUse
PBKDF2Built-in (SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"))
bcryptIndustry standard (libraries)
Argon2Modern winner of PHC
Warning: Never store passwords with raw SHA/MD5. Always use a slow KDF (PBKDF2/bcrypt/Argon2) with a per-user salt.

5. Using SSL/TLS

ClassUse
SSLContextConfiguration
SSLSocketFactory / SSLServerSocketFactoryTLS sockets
HttpClientUses default SSLContext
VersionsTLS 1.3 default in modern JDKs

6. Working with Certificates

Tool/ClassUse
keytoolManage keystores
KeyStoreProgrammatic access (JKS, PKCS12)
X509CertificateCert representation
Default truststore$JAVA_HOME/lib/security/cacerts

7. Implementing Authentication

MechanismDetail
JAASStandard but legacy feel
Spring Security / ShiroDe facto frameworks
OAuth/OIDCFor web apps

8. Implementing Authorization

PatternDetail
RBACRole-based
ABACAttribute-based
Java implementationFilter requests at framework layer

9. Preventing SQL Injection

PracticeDetail
PreparedStatementAlways use parameter binding
Never concat inputEven with sanitization
ORMJPA/Hibernate use parameters by default

10. Preventing XML/JSON Injection

RiskMitigation
XXEDisable DTDs/external entities on parsers
JSON deserializationWhitelist types; avoid polymorphic typing
XML signature wrappingStrict schema validation

11. Securing Deserialization

Example: ObjectInputFilter

ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(
    "com.example.model.*;java.util.*;java.lang.*;!*"
);
ObjectInputStream ois = new ObjectInputStream(in);
ois.setObjectInputFilter(filter);
PracticeDetail
Whitelist classesObjectInputFilter
Avoid Java serializationPrefer JSON/Protobuf
Update libsCVEs in serialization libs are common

12. Validating Input

PracticeDetail
Whitelist over blacklistDefine what's valid
Bean Validation (JSR 380)@NotNull, @Size, @Pattern, @Email
Canonicalize firstThen validate (paths, URLs)

13. Using Secure Random

FormDetail
SecureRandom.getInstanceStrong()Most secure available
new SecureRandom()Default CSPRNG
Avoidjava.util.Random for security