JASIG CAS Client Pluginを使用する 2 つの個別の Grails アプリケーションがあります。アプリケーションを実行すると、さまざまなユーザーが (クライアント プラグインを使用して) CAS サーバーに対して認証できます。
認証は別として、私は両方のアプリケーションで承認にGrails フィルターを使用します。ユーザーは認証される可能性がありますが、特定のユーザーのみが適切なアプリケーションにのみアクセスできるようにしたいと考えています。
以下のシナリオを除いて、すべてが機能します。
- ユーザー名「jack」で CAS サーバーに対する認証に成功し、アプリケーション A の使用が承認されました。
- アプリケーション A を閉じ、CAS からサインアウトします。
- ユーザー名「jill」で CAS サーバーに対する認証に成功しましたが、セッションのユーザー名がまだ「jack」であるため、アプリケーション B を使用する権限がありません。
アプリケーションの開始時にいつでもセッションをフラッシュする必要がありますか? もしそうなら、どうすればそれを行うことができますか? 私のフィルターのコードは次のとおりです。
import edu.yale.its.tp.cas.client.filter.CASFilter
class SecurityFilters {
def filters = {
loginCheck(controller: '*', action: '*') {
before = {
def username = session?.getAttribute(CASFilter.CAS_FILTER_USER)?.toLowerCase()
if (username in grailsApplication.config.users) {
return true
} else {
render view: '/invalid_user', model: [username: username]
return false
}
}
}
}
}