Java中常用的工具类实现与应用
JWT令牌处理工具封装
在现代Web应用开发中,JWT(JSON Web Token)被广泛用于用户身份认证和信息传递。以下是一个基于Spring Boot的JWT工具类实现,支持配置化参数,并完成token生成、解析及有效性验证功能。
@Data
@Component
@ConfigurationProperties(prefix = "app.jwt")
public class JwtTokenUtil {
private long expireMinutes; // 令牌有效期(分钟)
private String signingKey; // 签名密钥
public String generateToken(Long userId) {
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setSubject("user-auth")
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expireMinutes * 60 * 1000))
.claim("uid", userId)
.signWith(SignatureAlgorithm.HS512, signingKey)
.compressWith(CompressionCodecs.DEFLATE)
.compact();
}
public Long extractUserId(String token) {
if (token == null || token.isEmpty()) {
return null;
}
try {
Claims claims = Jwts.parser()
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
Object uid = claims.get("uid");
return uid instanceof Integer ? ((Integer) uid).longValue() : (Long) uid;
} catch (JwtException | ClassCastException e) {
return null;
}
}
public boolean isTokenExpired(String token) {
try {
Claims claims = Jwts.parser()
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
return claims.getExpiration().before(new Date());
} catch (JwtException e) {
return true; // 解析失败视为已过期
}
}
}
另一个轻量级版本适用于简单场景,直接通过Map传递负载数据:
@Component
public class SimpleJwtHelper {
private final String secretKey = "abcdefghijklmnopqrstuvwxyz1234567890";
public String createToken(Map<String, Object> payload) {
return Jwts.builder()
.addClaims(payload)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 1800000)) // 30分钟
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
public Claims decodeToken(String token) {
return Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(token)
.getBody();
}
}
数据库连接管理工具类
JDBC是Java访问关系型数据库的基础方式。为避免重复创建连接,通常会封装一个工具类来统一管理连接获取与资源释放。
public class DatabaseConnectionManager {
private static final String DRIVER_CLASS = "com.mysql.cj.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "password";
static {
try {
Class.forName(DRIVER_CLASS);
} catch (ClassNotFoundException e) {
throw new RuntimeException("数据库驱动加载失败", e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
}
public static void closeResources(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) rs.close();
if (ps != null) ps.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
该类通过静态代码块确保驱动仅加载一次,并提供安全的连接关闭方法,防止资源泄露。
技术栈分类参考
- 传统架构:Spring + Struts + Hibernate + JSP + JBPM
- 主流MVC架构:Spring + Spring MVC + MyBatis + MySQL + Freemarker
- 微服务生态:Spring Cloud + Eureka + Ribbon + Hystrix + Zookeeper + Kafka + Redis + RabbitMQ + Jenkins + Docker
- 云原生平台:Docker + Kubernetes + KubeSphere + DevOps