在Spring Boot应用中使用Spring Security Annotation

本文介绍了如何在Spring Boot应用中使用Spring Security Annotation进行权限控制,以替代在SecurityConfig类中按路径鉴权的方式。通过开启Spring Security的注解支持,如@Secured和@RolesAllowed,可以在方法或类级别定义访问权限。此外,还讨论了自定义Spring Security注解的可能性。

在Spring Boot应用中使用Spring Security Annotation

前言

在Spring Boot应用中集成Keycloak作认证和鉴权 一文中,描述了在Spring Boot应用中如何集成Keycloak作认证和鉴权。

本文描述如何在Spring Boot应用中使用Spring Security Annotation使得控制权限更加简单方便。

取消在SecurityConfig类中根据路径鉴权

@Override
    protected void configure(HttpSecurity http) throws Exception {
   
   
        super.configure(http);
        http.authorizeRequests()
//                    .antMatchers("/manager").hasRole("admin")
//                    .antMatchers("/books").hasAnyRole("user", "admin")
                    .anyRequest().permitAll();
    }

在SecurityConfig类根据路径鉴权有一个不好处就是,每次新增加路径都要改这个类。如果不小心改错了,影响了其他路径,很难测试出来。

可以采用Spring Security Annotation来在方法或类中来控制访问权限。

### 如何在Spring Boot应用程序中通过Spring Security控制HTTP请求方法 当Spring Security位于类路径上时,Spring Boot框架会自动对所有HTTP端点启用基本身份验证的安全拦截[^1]。然而,为了更细粒度地控制不同的HTTP请求方法(GET, POST, PUT, DELETE等),可以通过自定义安全配置来实现。 #### 创建并配置Spring Security 要开始定制化配置,需创建一个新的Java类继承`WebSecurityConfigurerAdapter` 或者使用基于组件的方式利用 `@EnableWebSecurity` 注解,并重写其中的方法来自定义安全策略: ```java import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; @EnableWebSecurity public class WebSecurityConfig { @Bean public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); // 添加用户和服务细节... return manager; } protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") // 控制/admin下的资源仅限管理员角色访问 .antMatchers("/", "/home", "/about").permitAll() // 对主页和其他页面开放公共访问 .anyRequest().authenticated(); // 所有其他请求都需要经过认证 http.httpBasic(); // 启用HTTP Basic Authentication // 配置特定于HTTP方法的权限如下所示: http.authorizeHttpRequests((requests) -> requests .antMatchers HttpMethod.GET,"/api/resource/**").hasAnyAuthority("SCOPE_READ","ROLE_USER") .antMatchers(HttpMethod.POST, "/api/resource/**").hasAnyAuthority("SCOPE_WRITE","ROLE_ADMIN") .antMatchers(HttpMethod.PUT, "/api/resource/**").hasAnyAuthority("SCOPE_UPDATE","ROLE_ADMIN") .antMatchers(HttpMethod.DELETE, "/api/resource/**").hasAnyAuthority("SCOPE_DELETE","ROLE_ADMIN")); http.csrf().disable(); // 如果不需要CSRF保护可禁用它 (注意生产环境应谨慎处理) } } ``` 上述代码片段展示了如何针对不同类型的HTTP请求指定授权规则。例如,对于 `/api/resource/*` 路径下执行POST操作的要求具有 "SCOPE_WRITE" 权限或属于 "ROLE_ADMIN" 的用户才能成功发起该请求;而获取相同URL模式的数据则只需要读取权限即可。 此外,在实际的企业级开发过程中,还可以结合RBAC模型进行更加复杂的权限管理[^3]。这通常涉及到定义多个角色及其关联的操作集,并将其映射至具体的应用场景之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值