使用Spring Security 限制URL訪問
阿新 • • 發佈:2021-01-08
使用Spring Security 限制URL訪問
通常保護url方式有以下幾種:
- 允許每個人訪問的url
- 基於角色保護url
- 基於多個角色保護url
- 基於IP地址保護url
本文介紹如何通過spring security 實現這些功能。
指定URL
指定url最常用的方法是通過antMatcher,如果我們想保護下列url:
url | 訪問限制 |
---|---|
http://www.example.com/static | 給所有人開放,如css, javascript |
http://www.example.com/register | 給所有人開放 |
http://www.example.com/login | 給所有人開放 |
http://www.example.com/user/ | ROLE_USER 和 ROLE_ADMIN 開放,如使用者profile |
http://www.example.com/admin/ | 僅ROLE_ADMIN ,並且限制ip地址,如:管理員介面 |
可以簡單使用:
.antMatchers("/register")
或指定多個:
.antMatchers("/register","/login","/user","/admin")
也可以指定單個頁面或目錄:
.antMatchers("register.html"); // Individual .antMatchers("/admin/**"); // Directory
保護URL
保護URL常用的方法有:
- authenticated()
保護UrL,需要使用者登入 - permitAll()
指定URL無需保護,一般應用與靜態資原始檔 - hasRole(String role)
限制單個角色訪問,角色將被增加 “ROLE_” .所以”ADMIN” 將和 “ROLE_ADMIN”進行比較. 另一個方法是hasAuthority(String authority) - hasAnyRole(String… roles)
允許多個角色訪問. 另一個方法是hasAnyAuthority(String… authorities)
其他有用的方法有:
- access(String attribute)
- hasIpAddress(String ipaddressExpression)
限制IP地址或子網
一起實現上述需求
實現程式碼如下:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/static","/register").permitAll()
.antMatchers("/user/**").hasRoles("USER", "ADMIN") // can pass multiple roles
.antMatchers("/admin/**").access("hasRole('ADMIN') and hasIpAddress('123.123.123.123')") // pass SPEL using access method
.anyRequest().authenticated()
.and()
.formLogin()
.loginUrl("/login")
.permitAll();
}
關鍵點說明:
permitAll 允許所有人訪問檔案或目錄
hasRoles 傳遞多個角色
access 用於複雜的訪問限制
總結
本文通過示例說明spring security限制url訪問的幾種方法,可以利用多種不同組合實現現實需求。