ResourceServerConfigurerAdapter 与 WebSecurityConfigurerAdapter

作者:编程家 分类: spring 时间:2025-04-23

使用Spring Security来保护应用程序的资源和提供身份验证和授权是一项重要的任务。在Spring Security中,有两个主要的配置类,分别是ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter。这两个类允许我们通过编写自定义配置来保护我们的应用程序,并根据需要进行身份验证和授权。

ResourceServerConfigurerAdapter是一个用于配置资源服务器的类。资源服务器是一个受保护的服务器,用于存储和提供受保护资源,例如API端点或静态文件。通过继承ResourceServerConfigurerAdapter类并覆盖其中的方法,我们可以自定义资源服务器的配置。

在配置资源服务器时,我们通常会指定受保护的资源路径以及需要进行身份验证和授权的客户端。我们可以使用@EnableResourceServer注解来启用资源服务器,并在配置类中重写configure方法来设置资源的路径和访问规则。

下面是一个使用ResourceServerConfigurerAdapter的示例代码:

java

@Configuration

@EnableResourceServer

public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

@Override

public void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/api/**").authenticated()

.anyRequest().permitAll();

}

}

在上面的示例中,我们配置了一个资源服务器,所有以"/api"开头的请求都需要进行身份验证,其他请求则允许匿名访问。

WebSecurityConfigurerAdapter是用于配置Web安全性的类。Web安全性是指保护应用程序的Web界面免受未经身份验证和未经授权的访问。通过继承WebSecurityConfigurerAdapter类并覆盖其中的方法,我们可以自定义Web安全性的配置。

在配置Web安全性时,我们通常会指定需要进行身份验证和授权的用户角色和权限。我们可以使用@EnableWebSecurity注解来启用Web安全性,并在配置类中重写configure方法来设置身份验证和授权规则。

下面是一个使用WebSecurityConfigurerAdapter的示例代码:

java

@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/admin/**").hasRole("ADMIN")

.antMatchers("/user/**").hasRole("USER")

.anyRequest().permitAll()

.and()

.formLogin()

.loginPage("/login")

.defaultSuccessUrl("/home")

.permitAll()

.and()

.logout()

.logoutUrl("/logout")

.permitAll();

}

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth

.inMemoryAuthentication()

.withUser("admin").password("{noop}admin123").roles("ADMIN")

.and()

.withUser("user").password("{noop}user123").roles("USER");

}

}

在上面的示例中,我们配置了Web安全性,指定了"/admin"路径需要具有"ADMIN"角色的用户才能访问,"/user"路径需要具有"USER"角色的用户才能访问,其他请求则允许匿名访问。我们还配置了登录和注销的相关设置,并使用了内存中的用户进行身份验证。

使用ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter的综合示例

在一个实际的应用程序中,我们可能需要同时使用ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter来保护资源和Web界面。下面是一个综合示例,展示了如何同时配置资源服务器和Web安全性:

java

@Configuration

@EnableResourceServer

@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter implements ResourceServerConfigurer {

@Override

public void configure(ResourceServerSecurityConfigurer resources) throws Exception {

resources.resourceId("my-resource-id");

}

@Override

public void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/api/**").authenticated()

.antMatchers("/admin/**").hasRole("ADMIN")

.antMatchers("/user/**").hasRole("USER")

.anyRequest().permitAll()

.and()

.formLogin()

.loginPage("/login")

.defaultSuccessUrl("/home")

.permitAll()

.and()

.logout()

.logoutUrl("/logout")

.permitAll();

}

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth

.inMemoryAuthentication()

.withUser("admin").password("{noop}admin123").roles("ADMIN")

.and()

.withUser("user").password("{noop}user123").roles("USER");

}

}

在上面的示例中,我们定义了一个名为"my-resource-id"的资源标识符,并将其配置到ResourceServerSecurityConfigurer中。在HttpSecurity配置中,我们同时设置了资源路径的访问规则和Web界面的访问规则。

ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter是Spring Security中用于配置资源服务器和Web安全性的关键类。通过编写自定义配置,我们可以保护应用程序的资源并提供身份验证和授权功能。我们可以根据实际需求,使用这两个配置类来灵活地配置我们的应用程序的安全性。

以上是关于ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter的使用及示例代码的介绍。通过使用这些类,我们可以保护应用程序的资源和Web界面,确保只有经过身份验证和授权的用户才能访问受保护的资源。这对于构建安全的应用程序是至关重要的。