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地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM