JAVA中Spring Security示例及常見問題
更新時間:2025年07月29日 10:21:23 作者:真上帝的左手
文章概述Spring Security OAuth2與JWT模塊的版本兼容性及遷移建議,強調2.5.x支持JDK8但已棄用,推薦新項目使用SpringAuthorizationServer(Spring Boot3.x+),并指出依賴沖突、配置示例及密鑰安全注意事項,感興趣的朋友一起看看吧
前言
Spring Security
- spring-security-oauth2
- spring-security-jwt
一、spring-security-oauth2
- 各版本的名稱及發(fā)布日期:
| 版本 | 適用 Spring Boot | 適用 Spring Security | 狀態(tài) | 備注 |
|---|---|---|---|---|
| 2.5.x | 2.5.x - 2.7.x | 5.5.x - 5.7.x | 維護中 | 推薦穩(wěn)定版 |
| 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的環(huán)境推薦版本
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.5.2.RELEASE</version> <!-- 最新穩(wěn)定版 -->
</dependency>- Spring Security 版本匹配
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.7.6</version> <!-- 推薦版本 -->
</dependency>- 注意事項
- Spring Security OAuth2 已棄用
- 官方推薦遷移到 Spring Authorization Server(Spring Security 5.7+ 內置)
- 新項目建議直接使用 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 簡化配置
- 遷移建議
如果計劃升級,可參考以下路徑:
- 短期方案:繼續(xù)使用 OAuth2 2.5.x(維護模式)
- 長期方案:遷移到 Spring Authorization Server(需要 Spring Boot 3.x+)
- Spring Authorization Server
二、spring-security-jwt
- 版本選擇
- spring-security-jwt 最終穩(wěn)定版:
<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),可能引發(fā) NoSuchMethodError。
- 遷移建議:
- 新項目推薦使用 spring-security-oauth2-authorization-server + jjwt 0.12.x。
- jjwt
到此這篇關于JAVA中Spring Security示例及常見問題的文章就介紹到這了,更多相關Spring Security示例內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于Https協(xié)議和HttpClient的實現(xiàn)詳解
這篇文章主要給大家介紹了關于Https協(xié)議和HttpClient實現(xiàn)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-05-05
Javaweb-HttpServletResponse的sendRedirectch重定向方式
這篇文章主要介紹了Javaweb-HttpServletResponse的sendRedirectch重定向方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

