SpringSecurity入门案例

1:什么是SpringSecurity

权限管理相关概念:

名词 解释
主体 即使用系统的用户或者设备
认证authentication 确认主体的身份
授权authorization 系统为主体分配权限

SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

SpringSecurity核心功能:

  1. 认证:验证用户是否合法,即是否能登录
  2. 授权:验证用户是否有做某些操作的权限

2:SpringSecurity入门案例

Maven依赖:

    <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-securityartifactId>
    dependency>
    <dependency>
            <groupId>org.springframework.securitygroupId>
            <artifactId>spring-security-testartifactId>
            <scope>testscope>
     dependency>

添加SpringSecurity配置类:

@Configuration//配置类,继承WebSecurityConfigurerAdapter
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //重写configure(HttpSecurity http)方法
    @Override
    protected void configure(HttpSecurity http) throws Exception {

                 //登录  可以配置一些属性
            http.formLogin()
                .and()
                 //认证配置 可以配置一些无需认证的路径和指定权限的路径,后续配置
                .authorizeRequests()
                    //任何请求都需要认证
                    .anyRequest().authenticated();
    }
}

运行: 访问localhost:8080即可看到如下页面

  1. 默认的用户名为user
  2. 密码会在程序启动时输出在控制台

SpringSecurity入门案例_第1张图片项目启动时控制台打印密码

3:SpringSecurity本质

SpringSecurity本质就是过滤链:
重要的三个过滤器:

  1. FilterSecurityInterceptor: 是一个方法级的权限过滤器, 基本位于过滤链的最底部
  2. ExceptionTranslationFilter: 是个异常过滤器,用来处理在认证授权过程中抛出的异常
  3. UsernamePasswordAuthenticationFilter : 对/login 的 POST 请求做拦截,校验表单中用户名,密码

4:UserDetailsService和PasswordEncoder

SpringBoot对SpringSecurity的自动配置:

  • 启用 Spring Security 的默认配置,它创建一个 servlet Filter作为一个名为 springSecurityFilterChain. 此 bean 负责应用程序中的所有安全性(保护应用程序 URL、验证提交的用户名和密码、重定向到登录表单等)。
  • 创建一个 UserDetailsService用户名为user的bean 以及记录到控制台的随机生成的密码。
  • 注册 Filter用一个名为 springSecurityFilterChain每个请求都使用 Servlet 容器。

如果需要自定义登录用户,比如从数据库查找,那么就可以自定义类实现UserDetailsService接口即可。

PasswordEncoder是密码解析器,官方推荐的实现类是BCryptPasswordEncoder。

你可能感兴趣的:(SpringSecurity,java,spring,spring,boot,SpringSecurity)