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();
}
- 用戶 zhangsan (張三) 初始密碼為:123456 所擁有的角色是admin。
- 用戶lisi(李四)初始密碼為:123456 賦予普通用戶角色ORDINARY
- 我們配置了/user/login 不做攔截可以直接訪問

- 在未登錄的情況下訪問需要驗證的接口,將會跳轉到SpringSecurity默認提供的登錄頁面。

- 用普通用戶(李四)訪問http://localhost:8080/user/getUserList地址,將會提示沒有權限錯誤 403

- 采用admin用戶(張三)訪問http://localhost:8080/user/getUserList地址

