同じ問題でインターネットを閲覧するのに長い時間を費やしました。提案された解決策は機能しませんでした(私はそれほど幸運ではなかったかもしれません:)。これが私のやり方です
まず、次のような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')
オンラインユーザーが次にページにアクセスすると、そのユーザーの権限が自動的にチェックされ、再ロードされます。手動でログアウトする必要はありません。
オプションで、新しいログイン時に以前のユーザー更新をクリアして、フィルターでの不要なリダイレクトを回避します
お役に立てれば