JAVA中Spring Security示例及常見問題
前言
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+
常見問題
- 如果遇到 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>- 兼容性說明:
- 需搭配 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示例及常見問題的文章就介紹到這了,更多相關(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跨域失敗的問題及解決
- 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開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗(yàn)
數(shù)據(jù)校驗(yàn)是為了使系統(tǒng)更完整,數(shù)據(jù)更精確,同時(shí)也有利于維護(hù)數(shù)據(jù)的安全性,下面這篇文章主要給大家介紹了關(guān)于SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2022-03-03
JavaWeb實(shí)現(xiàn)同一帳號(hào)同一時(shí)間只能一個(gè)地點(diǎn)登陸(類似QQ登錄的功能)
最近做了企業(yè)項(xiàng)目,其中有這樣的需求要求同一帳號(hào)同一時(shí)間只能一個(gè)地點(diǎn)登陸類似QQ登錄的功能。下面小編通過本文給大家分享實(shí)現(xiàn)思路,感興趣的朋友參考下吧2016-11-11
SpringBoot集成quartz實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要介紹了如何使用SpringBoot整合Quartz,并將定時(shí)任務(wù)寫入庫(kù)中(持久化存儲(chǔ)),還可以任意對(duì)定時(shí)任務(wù)進(jìn)行如刪除、暫停、恢復(fù)等操作,需要的可以了解下2023-09-09
Java char[]數(shù)組轉(zhuǎn)成String類型實(shí)現(xiàn)方式(char to String)
本文主要介紹了Java中char[]數(shù)組轉(zhuǎn)成String的四種方法:String.valueOf()、字符串連接、Character類的toString()和Character包裝器類,每種方法都有詳細(xì)的操作步驟和適用場(chǎng)景2026-04-04
spring使用validation參數(shù)及全局異常檢測(cè)方式
本文主要介紹了Java的數(shù)據(jù)校驗(yàn)規(guī)范validation-api,包括其定義的注解和HibernateValidator的實(shí)現(xiàn),還介紹了spring-boot-starter-validation的使用,可以讓開發(fā)者在SpringBoot應(yīng)用中簡(jiǎn)化數(shù)據(jù)校驗(yàn)的功能2025-02-02
SpringBoot實(shí)戰(zhàn)之SSL配置詳解
今天小編就為大家分享一篇關(guān)于SpringBoot實(shí)戰(zhàn)之SSL配置詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
JavaWeb?Listener?利用Session統(tǒng)計(jì)在線人數(shù)
這篇文章主要為大家介紹了JavaWeb?Listener?利用Session統(tǒng)計(jì)在線人數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
idea64.exe.vmoptions文件如何設(shè)置調(diào)整VM配置文件
這篇文章主要介紹了idea64.exe.vmoptions文件如何設(shè)置調(diào)整VM配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

