1. 程式人生 > 其它 >使用Spring Security 限制URL訪問

使用Spring Security 限制URL訪問

使用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)
    該方法使用 SPEL, 所以可以建立複雜的限制.
  • 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訪問的幾種方法,可以利用多種不同組合實現現實需求。