Spring Security 采用formLogin模式认证

Spring Security 学习

1. 采用formLogin认证方式

1.1 创建角色

@Override
protected void configure(HttpSecurity http) throws Exception {
    /*
    * 采用formLogin认证方式
    * */
    http.formLogin()
       .and().authorizeRequests()
      .antMatchers("/user/login").permitAll() // 允许暴露的接口
          .antMatchers("/user/getUserList").hasAnyAuthority("ROLE_ADMIN") // 需要ROLE_ADMIN角色才可以访问
      .antMatchers().hasAnyRole("ORDINARY") // 普通用户不分配任何权限
      .anyRequest().authenticated();
}

​ 创建角色方式有两个:

​ 一种是使用hasAnyAuthority创建角色,所创建的角色名称前需要加ROLE_角色名称。

​ 另一种使用hasAnyRole创建角色,不用加ROLE_ 直接填写 角色名称即可。

​ 从源码中可以看出hasRole 在return 时 添加了ROLE_前缀。

1.2创建用户

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    // 为用户分配角色
    auth.inMemoryAuthentication()
            .withUser("zhangsan") // 创建用户名为zhangsan
            .password(passwordEncoder().encode("123456")) // 用户密码
            .roles("ADMIN") // 用户所持有的角色
            .and()
            .withUser("lisi")
            .password(passwordEncoder().encode("123456"))
            .roles("ORDINARY")
            .and()
            .passwordEncoder(passwordEncoder()); // 配置密码BCrypt加密
}

@Bean
    public PasswordEncoder passwordEncoder () {
        return new BCryptPasswordEncoder();
    }
  1. 用户 zhangsan (张三) 初始密码为:123456 所拥有的角色是admin。
  2. 用户lisi(李四)初始密码为:123456 赋予普通用户角色ORDINARY
  • 我们配置了/user/login 不做拦截可以直接访问

  • 在未登录的情况下访问需要验证的接口,将会跳转到SpringSecurity默认提供的登录页面。

  • 用普通用户(李四)访问http://localhost:8080/user/getUserList地址,将会提示没有权限错误 403

  • 采用admin用户(张三)访问http://localhost:8080/user/getUserList地址

posted @ 2020-08-29 11:47  许言琪  阅读(1796)  评论(0编辑  收藏  举报