2015-10-03 60 views
0

我的應用程序這個URL映射:Grails的春季安全RequestMap不匹配/

"/"(controller: 'app', action: 'index') 

而且我使用域類來存儲RequestMap在數據庫實例。 對app/index的訪問僅限於某些角色,所以當用戶點擊/或/ app/index時,會顯示登錄表單。

當某個用戶有權查看/或/ app/index登錄時,該應用顯示一條消息:「對不起,您無權查看此頁面。」,所以由於某種原因,Spring Security不考慮我的RequestMaps。

我嘗試了很多組合,也許我錯過了一些東西。我現在所擁有的是(BootStrap.groovy中):

new RequestMap(url: '/', configAttribute: 'ROLE_ADMIN').save() 
new RequestMap(url: '/app/index', configAttribute: 'ROLE_ADMIN').save() 
new RequestMap(url: '/**', configAttribute: 'ROLE_ADMIN').save() 

我使用的登錄已ROLE_ADMIN分配的用戶,這是在登錄控制檯日誌:

userDetails [email protected]: 
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; 
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN 
auth [email protected]: 
Principal: [email protected]: 
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; 
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; 
Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN 

僅供參考,我的定製登錄使用的用戶+傳球+組織,這就是爲什麼有一個UserPassOrgAuthToken而不是標準的UsernamePasswordAuthenticationToken

編輯

我也有rejectIfNoRule =真實defaultTargetUrl =「/應用/索引」,不知道這是什麼影響:

grails.plugin.springsecurity.rejectIfNoRule = true 
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/app/index' // "/" is mapped to "/app/index" 

回答

0

看來我不能確保「/」,谷歌上搜索了幾天,有沒有確保「/」的例子。

我所做的是:

  1. 變化,從 「/」 到 「/應用/索引」 的mappging爲 「/」 到 「/登錄」
  2. 保持剛剛新RequestMap(網址:'/app/index',configAttribute:'ROLE_ADMIN')。save()

因此,在未登錄的情況下訪問應用程序會將我重定向到「/ login」。 如果我訪問「/」正在登錄,它將重定向到「/ app/index」(defaultTargetUrl)。

這是預期的行爲,但當用戶訪問我的網站根目錄「/」時,我必須刪除顯示儀表板的要求,現在我的用戶在URL中看到「/ app/index」而不是「/」 。