Spring Security 是一个开源的权限管理框架,可以帮助我们实现认证和授权功能。使用 Spring Security 可以轻松地实现常见的安全需求,如身份验证、角色 / 权限管理等。下面我将介绍一下如何使用 Spring Security。

一、配置 Spring Security 依赖
首先需要在项目的 pom.xml 文件中添加 Spring Security 的依赖。例如:


    
    
        org.springframework.boot
        spring-boot-starter-security
    

XML

二、配置 Spring Security
在 Spring Boot 项目中,可以通过创建一个继承自 WebSecurityConfigurerAdapter 的配置类来配置 Spring Security。需要定义一个类并添加 @Configuration 和 @EnableWebSecurity 注解,然后重写 configure 方法来配置安全策略。例如:


    
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/public").permitAll() // 允许访问的公开URL
                    .anyRequest().authenticated() // 其他URL需要身份验证
                    .and()
                .formLogin()
                    .loginPage("/login") // 指定自定义登录页面
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
        }
        
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth
                .inMemoryAuthentication()
                    .withUser("user").password("password").roles("USER");
        }
    }

Java

上述代码中的 configure 方法定义了身份验证和授权规则,.antMatchers 方法用于指定公开访问的 URL,.formLogin 方法用于配置自定义登录页面,.logout 方法用于配置退出登录的 URL。

三、使用 Spring Security
可以在控制器中使用 Spring Security 提供的注解进行权限控制。例如,@Secured 注解用于限制方法的访问权限,@PreAuthorize 和 @PostAuthorize 注解用于在方法执行前后进行权限验证。


    
    @RestController
    public class ExampleController {
        
        @GetMapping("/admin")
        @Secured("ROLE_ADMIN") // 只有角色为ROLE_ADMIN的用户才能访问
        public String admin() {
            return "Hello Admin!";
        }
        
        @GetMapping("/user")
        @PreAuthorize("hasRole('USER')") // 只有角色为USER的用户才能访问
        public String user() {
            return "Hello User!";
        }
    }

Java

在上述代码中,/admin 接口只有角色为 ROLE_ADMIN 的用户才能访问,/user 接口只有角色为 USER 的用户才能访问。

通过上述三个步骤,我们就可以使用 Spring Security 实现认证和授权功能了。同时,Spring Security 还提供了其他一些功能,如记住我功能、CSRF 防护等,可以根据实际需求进行配置和使用。