Spring @EnableResourceServer 与 @EnableOAuth2Sso

作者:编程家 分类: spring 时间:2025-07-19

使用Spring框架时,我们经常会遇到需要对资源进行保护和授权的情况。为了简化这个过程,Spring提供了两个注解:@EnableResourceServer和@EnableOAuth2Sso。本文将介绍这两个注解的作用、用法以及一个实际案例。

什么是@EnableResourceServer和@EnableOAuth2Sso

@EnableResourceServer注解用于启用资源服务器,它告诉Spring将当前应用程序配置为OAuth2资源服务器。资源服务器的主要作用是验证和授权访问令牌,以保护受保护的资源。这个注解通常用于需要对外提供API接口的应用程序。

@EnableOAuth2Sso注解用于启用OAuth2单点登录(Single Sign-On,简称SSO)功能。它告诉Spring将当前应用程序配置为OAuth2客户端,以便用户可以通过其他认证服务器进行登录,并在登录成功后自动获得访问令牌。这个注解通常用于需要用户认证和授权的应用程序。

使用@EnableResourceServer和@EnableOAuth2Sso的案例

下面是一个简单的案例,演示如何在Spring Boot应用程序中使用@EnableResourceServer和@EnableOAuth2Sso。假设我们有一个应用程序需要对外提供API接口,并且需要用户登录才能访问受保护的资源。

首先,我们需要添加相关依赖到项目的pom.xml文件中:

xml

org.springframework.boot

spring-boot-starter-security

org.springframework.cloud

spring-cloud-starter-oauth2

然后,在主应用程序类上添加@EnableResourceServer和@EnableOAuth2Sso注解:

java

@SpringBootApplication

@EnableResourceServer

@EnableOAuth2Sso

public class ResourceServerApplication {

public static void main(String[] args) {

SpringApplication.run(ResourceServerApplication.class, args);

}

}

接下来,我们定义一个受保护的API接口,只有经过认证的用户才能访问:

java

@RestController

@RequestMapping("/api")

public class ApiController {

@GetMapping("/hello")

public String hello() {

return "Hello, World!";

}

}

最后,我们需要配置认证服务器的相关信息,例如认证服务器的URL、客户端ID和密钥等。这部分配置通常存放在application.yml或application.properties文件中。

yaml

spring:

security:

oauth2:

client:

registration:

my-client:

client-id: my-client-id

client-secret: my-client-secret

provider: my-authorization-server

provider:

my-authorization-server:

token-uri: http://localhost:8080/oauth/token

以上就是使用@EnableResourceServer和@EnableOAuth2Sso的一个简单案例。当我们启动应用程序后,访问"/api/hello"接口时,如果用户没有登录,将会被重定向到认证服务器进行登录;如果用户已经登录并且具有访问权限,将会返回"Hello, World!"。

在本文中,我们介绍了Spring框架中的@EnableResourceServer和@EnableOAuth2Sso注解,并演示了一个简单的使用案例。通过使用这两个注解,我们可以方便地实现资源保护和用户认证授权的功能,使我们的应用程序更加安全和可靠。希望本文对您有所帮助!