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

  1. 各版本的名称及发布日期:
版本适用 Spring Boot适用 Spring Security状态备注‌
‌2.5.x2.5.x - 2.7.x5.5.x - 5.7.x‌维护中推荐稳定版
‌2.4.x2.4.x - 2.6.x5.4.x - 5.6.x已弃用建议升级
‌2.3.x2.3.x - 2.5.x5.3.x - 5.5.x已弃用不推荐
‌2.2.x2.2.x - 2.4.x5.2.x - 5.4.x已弃用仅旧项目
‌2.1.x2.1.x - 2.3.x5.1.x - 5.3.x已弃用不推荐
  1. 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>
  1. Spring Security‌ 版本匹配
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.7.6</version> <!-- 推荐版本 -->
</dependency>
  1. 注意事项‌
  • 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 简化配置
  1. 迁移建议‌

如果计划升级,可参考以下路径:

  • 短期方案‌:继续使用 OAuth2 2.5.x(维护模式)
  • 长期方案‌:迁移到 ‌Spring Authorization Server‌(需要 Spring Boot 3.x+)
  1. Spring Authorization 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。
  1. jjwt

到此这篇关于JAVA中Spring Security示例及常见问题的文章就介绍到这了,更多相关Spring Security示例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot开发详解之Controller接收参数及参数校验

    SpringBoot开发详解之Controller接收参数及参数校验

    数据校验是为了使系统更完整,数据更精确,同时也有利于维护数据的安全性,下面这篇文章主要给大家介绍了关于SpringBoot开发详解之Controller接收参数及参数校验的相关资料,需要的朋友可以参考下
    2022-03-03
  • JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    最近做了企业项目,其中有这样的需求要求同一帐号同一时间只能一个地点登陆类似QQ登录的功能。下面小编通过本文给大家分享实现思路,感兴趣的朋友参考下吧
    2016-11-11
  • SpringBoot集成quartz实现定时任务

    SpringBoot集成quartz实现定时任务

    这篇文章主要介绍了如何使用SpringBoot整合Quartz,并将定时任务写入库中(持久化存储),还可以任意对定时任务进行如删除、暂停、恢复等操作,需要的可以了解下
    2023-09-09
  • Java char[]数组转成String类型实现方式(char to String)

    Java char[]数组转成String类型实现方式(char to String)

    本文主要介绍了Java中char[]数组转成String的四种方法:String.valueOf()、字符串连接、Character类的toString()和Character包装器类,每种方法都有详细的操作步骤和适用场景
    2026-04-04
  • Java中的这些骚操作你不能不知道!!!

    Java中的这些骚操作你不能不知道!!!

    今天在看python相关的东西,看到各种骚操作,回头想了下Java有没有什么骚操作,整理下面几种,一起看一下吧,希望能给你带来帮助
    2021-07-07
  • spring使用validation参数及全局异常检测方式

    spring使用validation参数及全局异常检测方式

    本文主要介绍了Java的数据校验规范validation-api,包括其定义的注解和HibernateValidator的实现,还介绍了spring-boot-starter-validation的使用,可以让开发者在SpringBoot应用中简化数据校验的功能
    2025-02-02
  • SpringBoot实战之SSL配置详解

    SpringBoot实战之SSL配置详解

    今天小编就为大家分享一篇关于SpringBoot实战之SSL配置详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • JavaWeb Listener 利用Session统计在线人数

    JavaWeb Listener 利用Session统计在线人数

    这篇文章主要为大家介绍了JavaWeb Listener 利用Session统计在线人数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java Base64编码方法详解及实例解析

    Java Base64编码方法详解及实例解析

    Base64是一种用于将二进制数据转换成文本数据的编码方式,在本文中,我们介绍了Base64.encodeBase64String方法的用途和功能,它是Java语言中用于Base64编码的一个重要工具,需要的朋友可以参考下
    2023-09-09
  • idea64.exe.vmoptions文件如何设置调整VM配置文件

    idea64.exe.vmoptions文件如何设置调整VM配置文件

    这篇文章主要介绍了idea64.exe.vmoptions文件如何设置调整VM配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论