一篇文章帶你搞定 SpringSecurity 配置多個HttpSecurity 和實現對於方法安全的控制
一、實現配置多個 HttpSecurity
前期的配置和學習基本和本系列的文章都一樣,
本篇文章不再贅述:學習 Spring Security 看這一篇部落格就夠了
@Configuration
public class MultiHttpSecurityConfig {
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("nlcs").password("$2a$10$G3kVAJHvmRrr6sOj.j4xpO2Dsxl5EG8rHycPHFWyi9UMIhtdSH15u").roles("admin")
.and()
.withUser("yolo").password("$2a$10$kWjG2GxWhm/2tN2ZBpi7bexXjUneIKFxIAaMYJzY7WcziZLCD4PZS").roles("user");
}
@Configuration
@Order(1)
public static class AdminSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/admin/**").authorizeRequests().anyRequest().hasAnyRole("admin");
}
}
@Configuration
public static class OtherSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/doLogin")
.permitAll()
.and()
.csrf().disable();
}
}
}
(1)當配置多個 httpsecurity 時,就不用像前面那樣主方法繼承 WebSecurityConfigurerAdapter
,只需要內部的靜態類繼承 WebSecurityConfigurerAdapter
即可
(2)當多個 httpsecurity 時,需要通過 @Order(1)
指定優先順序
二、實現方法安全的控制
1. 編寫配置類
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
public class MultiHttpSecurityConfig {
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("yolo").password("$2a$10$G3kVAJHvmRrr6sOj.j4xpO2Dsxl5EG8rHycPHFWyi9UMIhtdSH15u").roles("admin")
.and()
.withUser("nlcs").password("$2a$10$kWjG2GxWhm/2tN2ZBpi7bexXjUneIKFxIAaMYJzY7WcziZLCD4PZS").roles("user");
}
@Configuration
@Order(1)
public static class AdminSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/admin/**").authorizeRequests().anyRequest().hasAnyRole("admin");
}
}
@Configuration
public static class OtherSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/doLogin")
.permitAll()
.and()
.csrf().disable();
}
}
}
prePostEnabled
表示在方法前進行校驗
2. 編寫 service
@Service
public class MethodService {
@PreAuthorize("hasRole('admin')")
public String admin(){
return "hello admin";
}
//有 user 這個角色才可以訪問
@Secured("ROLE_user")
public String user(){
return "hello user";
}
@PreAuthorize("hasAnyRole('admin','user')")
public String hello(){
return "hello hello";
}
}
@PreAuthorize("hasRole('admin')")
表示方法訪問前對其進行驗證,是否是 admin 許可權
3. 編寫 controller
@RestController
public class HelloController {
@Autowired
MethodService methodService;
@GetMapping("/admin")
public String admin() {
return methodService.admin();
}
@GetMapping("/user")
public String user() {
return methodService.user();
}
@GetMapping("/hello")
public String hello() {
return methodService.hello();
}
}
對於 這三個介面都可以訪問,但是對於介面裡的具體方法,只有具有對應許可權的使用者才可以訪問。
4. 測試
yolo 登入:它具有 admin 許可權,可以訪問 admin 介面及其方法,但是對於 user 方法的訪問則不可以
相關文章
- 一篇文章帶你認識 SpringSecuritySpringGse
- 一篇文章帶你使用 JSON 格式資料完成 SpringSecurity 登入JSONSpringGse
- 一篇文章帶你搞定經典面試題之扔雞蛋問題面試題
- 一篇文章帶你搞定 SpringBoot 整合 Swagger2Spring BootSwagger
- 一篇文章搞定Python多程式(全)Python
- MySQL命令,一篇文章替你全部搞定MySql
- 一篇文章帶你瞭解和使用Promise物件Promise物件
- 一篇文章帶你解讀redis分散式鎖的發展史和正確實現方式Redis分散式
- SpringBoot框架整合SpringSecurity實現安全訪問控制Spring Boot框架Gse
- 一篇文章帶你吃透 Docker 原理Docker
- 一篇文章帶你入門Zookeeper
- 在 CSDN 上面看到的一篇關於 Laravel 關聯表模型和多對多關係的文章Laravel模型
- 一篇文章搞定面試中的二叉樹題目(java實現)面試二叉樹Java
- Nginx的安裝和多域名配置的實現方法Nginx
- 一篇文章帶你讀懂Redis的哨兵模式Redis模式
- 一篇文章帶你弄懂Kerberos的設計思路ROS
- 一篇文章搞定前端面試前端面試
- 一篇文章帶你快速入門createjsJS
- 一篇文章搞定Python中的類Python
- 一篇文章帶你搞懂 etcd 3.5 的核心特性
- hibernate一對多、多對多的實體設計和配置檔案配置
- (圖解 HTTP)一篇文章帶你深入理解 IP、TCP 和 DNS圖解HTTPTCPDNS
- 一篇文章搞定 MySQL 索引優化MySql索引優化
- 一篇文章搞定javascript氣泡排序JavaScript排序
- 一篇文章帶你初步瞭解—CSS特指度CSS
- 一篇文章帶你瞭解HTML5 MathMLHTML
- # 一篇文章帶你入門軟體測試
- MySQL十種鎖,一篇文章帶你全解析MySql
- 一篇文章帶你瞭解——Kotlin協程Kotlin
- 一篇文章帶你瞭解介面自動化
- 一篇文章帶你掌握效能測試工具——JmeterJMeter
- 一篇文章帶你玩轉正規表示式
- 一篇文章帶你掌握Flex佈局的所有用法Flex
- 一篇文章帶你瞭解HTML格式化元素HTML
- 一篇文章帶你瞭解CSS 分頁例項CSS
- 一篇文章帶你吃透hashmap(面試指南升級版)HashMap面試
- 一篇文章帶你入門SQL程式設計GIFUSQL程式設計
- 一篇文章帶你瞭解高可用架構分析架構