【Spring】springSecurity使用

一、基本配置

1. 引入依赖

在Spring Boot项目中,使用Spring Security首先需要引入相应的依赖。在pom.xml中添加spring-boot-starter-security依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId>  
</dependency>
2. 配置安全规则

Spring Security提供了多种配置安全规则的方式,包括使用Java配置类、注解或XML配置文件。在Spring Boot项目中,通常使用Java配置类来配置安全规则。

通过继承WebSecurityConfigurerAdapter类并重写其configure方法,可以定义用户认证和授权的相关规则。例如:

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
  
    @Autowired  
    private UserDetailsService userDetailsService;  
  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http  
            .authorizeRequests()  
                .antMatchers("/login", "/register").permitAll() // 允许匿名访问登录和注册页面  
                .anyRequest().authenticated() // 其他请求都需要认证  
                .and()  
            .formLogin()  
                .loginPage("/login") // 自定义登录页面  
                .permitAll()  
                .and()  
            .logout()  
                .permitAll(); // 允许匿名用户访问注销URL  
    }  
  
    @Autowired  
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {  
        auth  
            .userDetailsService(userDetailsService)  
            .passwordEncoder(passwordEncoder()); // 使用密码编码器  
    }  
  
    @Bean  
    public PasswordEncoder passwordEncoder() {  
        return new BCryptPasswordEncoder(); // 使用BCrypt进行密码加密  
    }  
}

二、认证过程

Spring Security的认证过程通常涉及以下几个步骤:

  1. 用户提交认证信息:用户通过表单或其他方式提交用户名和密码等认证信息。

  2. AuthenticationFilter拦截请求:Spring Security中的UsernamePasswordAuthenticationFilter(或其他自定义的认证过滤器)会拦截用户的登录请求。

  3. 封装认证信息:过滤器将请求中的认证信息封装成UsernamePasswordAuthenticationToken对象。

  4. 调用AuthenticationManager:将封装好的AuthenticationToken传递给AuthenticationManager进行认证。

  5. 认证提供者执行认证AuthenticationManager会调用一个或多个AuthenticationProvider进行实际的认证操作。AuthenticationProvider会调用UserDetailsService来获取用户信息,并与提交的认证信息进行比对。

  6. 认证成功或失败:如果认证成功,会将用户的认证信息封装成Authentication对象,并存储在SecurityContextHolder中,供后续操作使用;如果认证失败,则抛出异常,并由Spring Security处理相应的错误响应。

三、授权过程

授权过程是在用户认证成功后进行的,用于控制用户对资源的访问权限。

  1. 访问资源:用户尝试访问某个受保护的资源。

  2. 拦截器拦截请求:Spring Security中的拦截器(如FilterSecurityInterceptor)会拦截用户的请求。

  3. 获取所需权限:拦截器会调用FilterInvocationSecurityMetadataSource来获取被拦截URL所需的全部权限。

  4. 访问决策:拦截器会调用AccessDecisionManager进行访问决策。AccessDecisionManager会根据用户的认证信息、请求的URL和配置的权限规则来判断用户是否有权访问该资源。

  5. 授权成功或失败:如果授权成功,用户可以继续访问资源;如果授权失败,则抛出异常,并由Spring Security处理相应的错误响应。

四、其他功能

除了基本的认证和授权功能外,Spring Security还提供了许多其他安全相关的功能,如:

  • 防止跨站请求伪造(CSRF):Spring Security可以自动为表单添加CSRF令牌,并验证提交请求中的令牌值,以防止CSRF攻击。
  • 会话管理:Spring Security提供了会话固定保护、会话超时等会话管理功能。
  • 加密和签名:Spring Security支持使用加密算法对敏感信息进行加密,以及使用签名算法对消息进行签名和验证,以确保信息的机密性和完整性。

相关推荐

  1. conda使用,pip使用

    2024-07-11 20:50:03       53 阅读
  2. VueUse使用

    2024-07-11 20:50:03       65 阅读
  3. Git<span style='color:red;'>使用</span>

    Git使用

    2024-07-11 20:50:03      56 阅读
  4. netty使用

    2024-07-11 20:50:03       52 阅读
  5. gdb<span style='color:red;'>使用</span>

    gdb使用

    2024-07-11 20:50:03      61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 20:50:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 20:50:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 20:50:03       58 阅读
  4. Python语言-面向对象

    2024-07-11 20:50:03       69 阅读

热门阅读

  1. 力扣682.棒球比赛

    2024-07-11 20:50:03       17 阅读
  2. STM32学习历程(day4)

    2024-07-11 20:50:03       20 阅读
  3. C# 装饰器模式(Decorator Pattern)

    2024-07-11 20:50:03       20 阅读
  4. 代码随想录-DAY⑦-字符串——leetcode 344 | 541 | 151

    2024-07-11 20:50:03       21 阅读
  5. FastAPI+SQLAlchemy数据库连接

    2024-07-11 20:50:03       19 阅读
  6. 关于vue监听数组

    2024-07-11 20:50:03       18 阅读
  7. SQL 自定义函数

    2024-07-11 20:50:03       22 阅读
  8. linux内核访问读写用户层文件方法

    2024-07-11 20:50:03       21 阅读
  9. RK3568平台开发系列讲解(网络篇)netfilter框架

    2024-07-11 20:50:03       19 阅读
  10. Netty服务端接收TCP链接数据

    2024-07-11 20:50:03       16 阅读