訪問我設置一個spring-boot-1.5.3
應用與spring-security-4.2.2
和基於當局配置限制的路徑。這些限制類似於此:檢查URL是通過身份驗證的用戶
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/accounts/**", "/roles/**")
.hasAuthority(ADMINISTRATOR)
.and()
.antMatchers("/**")
.hasAuthority(USER)
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.csrf()
.disable();
}
}
總之 - 我希望用戶有權力USER
到能夠訪問我的整個Web應用程序,除了/accounts/**
和/roles/**
路徑。此配置工作正常,如果我嘗試訪問這些頁面而沒有相應的權限,則會收到預期的錯誤(403)。
對於具有USER
權限的用戶,我想隱藏一些URL,以便它們不發出這些請求並獲得403
錯誤。 我如何檢查是否允許用戶訪問的URL?
到目前爲止,我已經嘗試注入WebInvocationPrivilegeEvaluator
並調用它的isAllowed
方法,雖然這似乎並不奏效。例如:
// Helper class that returns authentication instance.
Authentication auth = AuthUtils.getAuthentication();
// Don't have permission to access /users, expect to get false result.
boolean res = webInvocationPrivilegeEvaluator.isAllowed("/users", auth);
assert res == false; // fails
可能的好主意,但不適用於@PreAuthorize。我所得到的FilterSecurityInterceptor確實只返回securityMetaDataSource和「authenticated」過濾器,而有問題的URL有@PreAuthorize(「hasRole('ADMIN')」)註釋。看起來我必須得到不同的過濾器,才能提供PreAuthorize中列出的所有條件 – tequilacat