花了很長的時間同樣的問題瀏覽互聯網。建議的解決方案不起作用(可能我沒那麼幸運:)。因此,這裏是我的方式
首先,我們創建一個Grails服務是這樣的:
class SecurityHelperService {
final Set<String> userUpdates = new HashSet<String>()
public void markUserUpdate(String username) {
synchronized (userUpdates) {
userUpdates.add(username)
}
}
public boolean clearUserUpdate(String username) {
synchronized (userUpdates) {
return userUpdates.remove(username) != null
}
}
public boolean checkUserUpdate() {
def principal = springSecurityService.principal
if (principal instanceof org.springframework.security.core.userdetails.User) {
synchronized (userUpdates) {
if (!userUpdates.remove(principal.username)) {
return true
}
}
springSecurityService.reauthenticate(principal.username)
return false
}
return true
}
}
在我們創建了一個Grails的過濾器來檢查當前用戶權限已被改變了grails-app/conf
目錄,例如
class MyFilters {
SecurityHelperService securityHelper
def filters = {
userUpdateCheck(controller: '*', action: '*') {
before = {
if (!securityHelper.checkUserUpdate()) {
redirect url: '/'
return false
}
return true
}
}
}
}
這一切。當代碼更新用戶權限,我們稱之爲服務方法
securityHelper.markUserUpdate('username')
當在線用戶下一次訪問頁面時,他/她的權限自動檢查並重新加載每次。無需手動註銷。
可選,我們在一個新的登錄清除以前的用戶更新,以避免不必要的重定向在過濾器
希望這有助於