JAVA中Spring Security示例及常见问题
目录
- 前言
- 一、spring-security-oauth2
- 二、spring-security-jwt
前言
Spring Security
- spring-security-oauth2
- spring-security-jwt
一、spring-security-oauth2
- 各版本的名称及发布日期:
版本 | 适用 Spring Boot | 适用 Spring Security | 状态 | 备注 |
---|---|---|---|---|
2.5.x | 2.5.x - 2.7.x | 5.5.x - 5.7.x | 维护中 | 推荐稳定版 |
2.4.x | 2.4.x - 2.6.x | 5.4.x - 5.6.x | 已弃用 | 建议升级 |
2.3.x | 2.3.x - 2.5.x | 5.3.x - 5.5.x | 已弃用 | 不推荐 |
2.2.x | 2.2.x - 2.4.x | 5.2.x - 5.4.x | 已弃用 | 仅旧项目 |
2.1.x | 2.1.x - 2.3.x | 5.1.x - 5.3.x | 已弃用 | 不推荐 |
- Spring Boot 2.7.x + JDK 8的环境推荐版本
<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> <version>2.5.2.RELEASE</version> <!-- 最新稳定版 --> </dependency>
- Spring Security 版本匹配
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.7javascript.6</version> <!-- 推荐版本 --> </dependency>
- 注意事项
- Spring Security OAuth2 已弃用
- 官方推荐迁移到 Spring Authorization Server(Spring Security 5.7+ 内置)
- 新项目建议javascript直接使用 spring-security-oauth2-authorization-server(Spring Boot 3.x+)
JDK 8 兼容性
- Spring Security OAuth2 2.5.x 仍支持 编程客栈JDK 8
- 如需升级到 Spring Boot 3.x,需切换至 JDK 17+
常见问题
- 如果遇到 NoSuchMethodError,检查依赖冲突(如旧版 spring-security-jwt)
- 推荐使用 spring-security-oauth2-autoconfigure 简化配置
- 迁移建议编程
如果计划升级,可参考以下路径:
- 短期方案:继续使用 OAuth2 2.5.x(维护模式)
- 长期方案:迁移到 Spring Authorization Server(需要 Spring Boot 3.x+)
- Spring Aut编程客栈horization Server
二、spring-security-jwt
- 版本选择
- spring-security-jwt 最终稳定版:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId> <version>1.1.1.RELEASE</version> <!-- 官方最后维护版本 --> </dependency>
- 兼容性说明:
- 需搭配 spring-security-oauth2 2.5.x 使用(如 2.5.2.RELEASE)。
- 不支持 Spring Boot 3.x 或 JDK 17+。
2. 基础配置示例
- JWT 密钥配置JwtConfig.Java
@Configuration public class JwtConfig { @Value("${jwt.secret}") private String secret; @Bean public JwtAccessTokenConverter jwtAccessTokenConverter() { JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); converter.setSigningKey(secret); // 设置签名密钥 return converter; } @Bean public TokenStore tokenStore() { return new JwtTokenStore(jwtAccessTokenConverter()); } }
- 需在 application.properties 中配置 jwt.secret=your-256-bit-secret。
- OAuth2 资源服务器配置
- ResourceServerConfig.java
@Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/public/**").permitAll() .anyRequest().authenticated(); } }
3. 生成和解析 JWT 令牌
- 生成令牌(授权服务器端)JwtTokenEnhancer.java
class JwtTokenEnhancer implements TokenEnhancer { @Override public OAuth2AccessToken enhance( OAuth2AccessToken accessToken, OAuth2Authentication authentication) { Map<String, Object> additionalInfo = new HashMap<>(); additionalInfo.put("organization", "example-org"); ((DefaultOAuth2AccessToken) accessToken) .setAdditionalInformation(additionalInfo); return accessToken; } }
- 解析令牌(资源服务器端)JwtUtils.java
class JwtUtils { public static Claims extractClaims(String token, String secret) { return Jwts.parser() .setSigningKey(secret.getBytes()) .parseClaimsJws(token) .getBody(); } }
4. 注意事项
- 密钥安全:
- 替换 JwtAccessTokenConverter 的签名逻辑)。
- 依赖冲突:
- 避免引入 jjwt 旧版本(如 0.9.x),可能引发 NoSuchMethodError。
- 迁移建议:
- 新项目推荐使用 spring-security-oauth2-authorization-server + jjwt 0.12.x。
- jjwt
到此这篇关于JAVA中Spring Security示例及常见问题的文章就介绍到这了,更多相关Spring Security示例内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论