JAVA中Spring Security示例及常見問(wèn)題
前言
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 | 維護(hù)中 | 推薦穩(wěn)定版 |
| 2.4.x | 2.4.x - 2.6.x | 5.4.x - 5.6.x | 已棄用 | 建議升級(jí) |
| 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 | 已棄用 | 僅舊項(xiàng)目 |
| 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>- 注意事項(xiàng)
- Spring Security OAuth2 已棄用
- 官方推薦遷移到 Spring Authorization Server(Spring Security 5.7+ 內(nèi)置)
- 新項(xiàng)目建議直接使用 spring-security-oauth2-authorization-server(Spring Boot 3.x+)
JDK 8 兼容性
- Spring Security OAuth2 2.5.x 仍支持 JDK 8
- 如需升級(jí)到 Spring Boot 3.x,需切換至 JDK 17+
常見問(wèn)題
- 如果遇到 NoSuchMethodError,檢查依賴沖突(如舊版 spring-security-jwt)
- 推薦使用 spring-security-oauth2-autoconfigure 簡(jiǎn)化配置
- 遷移建議
如果計(jì)劃升級(jí),可參考以下路徑:
- 短期方案:繼續(xù)使用 OAuth2 2.5.x(維護(hù)模式)
- 長(zhǎng)期方案:遷移到 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> <!-- 官方最后維護(hù)版本 -->
</dependency>- 兼容性說(shuō)明:
- 需搭配 spring-security-oauth2 2.5.x 使用(如 2.5.2.RELEASE)。
- 不支持 Spring Boot 3.x 或 JDK 17+。
2. 基礎(chǔ)配置示例
- JWT 密鑰配置
JwtConfig.java
@Configuration
public class JwtConfig {
@Value("${jwt.secret}")
private String secret;
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey(secret); // 設(shè)置簽名密鑰
return converter;
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter());
}
}- 需在 application.properties 中配置 jwt.secret=your-256-bit-secret。
- OAuth2 資源服務(wù)器配置
- 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 令牌
- 生成令牌(授權(quán)服務(wù)器端)
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;
}
}- 解析令牌(資源服務(wù)器端)
JwtUtils.java
class JwtUtils {
public static Claims extractClaims(String token, String secret) {
return Jwts.parser()
.setSigningKey(secret.getBytes())
.parseClaimsJws(token)
.getBody();
}
}4. 注意事項(xiàng)
- 密鑰安全:
- 替換 JwtAccessTokenConverter 的簽名邏輯)。
- 依賴沖突:
- 避免引入 jjwt 舊版本(如 0.9.x),可能引發(fā) NoSuchMethodError。
- 遷移建議:
- 新項(xiàng)目推薦使用 spring-security-oauth2-authorization-server + jjwt 0.12.x。
- jjwt
到此這篇關(guān)于JAVA中Spring Security示例及常見問(wèn)題的文章就介紹到這了,更多相關(guān)Spring Security示例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中Spring的Security使用詳解
- Java SpringSecurity+JWT實(shí)現(xiàn)登錄認(rèn)證
- Spring Security攔截器引起Java CORS跨域失敗的問(wèn)題及解決
- java中Spring Security的實(shí)例詳解
- Java中SpringSecurity密碼錯(cuò)誤5次鎖定用戶的實(shí)現(xiàn)方法
- java中自定義Spring Security權(quán)限控制管理示例(實(shí)戰(zhàn)篇)
- JavaWeb開發(fā)之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基礎(chǔ)框架
相關(guān)文章
Springboot項(xiàng)目如何異步提高接口的響應(yīng)速度
這篇文章主要介紹了Springboot項(xiàng)目如何異步提高接口的響應(yīng)速度方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
關(guān)于Https協(xié)議和HttpClient的實(shí)現(xiàn)詳解
這篇文章主要給大家介紹了關(guān)于Https協(xié)議和HttpClient實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
Javaweb-HttpServletResponse的sendRedirectch重定向方式
這篇文章主要介紹了Javaweb-HttpServletResponse的sendRedirectch重定向方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Java使用excel工具類導(dǎo)出對(duì)象功能示例
這篇文章主要介紹了Java使用excel工具類導(dǎo)出對(duì)象功能,結(jié)合實(shí)例形式分析了java創(chuàng)建及導(dǎo)出Excel數(shù)據(jù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法
這篇文章主要介紹了Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

