ここに私の問題があります: ユーザーが API (基本的にすべての /myapi/** 要求) を使用しているときに、不要なセッションの作成を避けるために、Spring セキュリティ コア フィルターを使用したくありません。API は oauth トークンに基づいています。
そこで、ユーザー認証にプラグイン spring-security-core を使用し、Config.groovy ファイルに次のように追加しました。
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-securityContextHolderAwareRequestFilter,-rememberMeAuthenticationFilter,-anonymousAuthenticationFilter,-exceptionTranslationFilter',
'/**':'JOINED_FILTERS'
]
基本的に、私が理解したことから、すべての/myapi/somethingに対してスプリングセキュリティフィルターを通過するべきではありませんが、実際には、セッションを作成するときにすべてのフィルターを通過します(/のセッションには何もありません) myapi/何か。
しかし、http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/16%20Filters.htmlによると
そのため、以前のルールのいずれにも一致しない URL の最後に /** キャッチオール ルールが必要です。
そのため、リクエストがまだ /myapi/something のすべてのフィルターを通過している理由がわかりません。
私が行ったいくつかのテストは、役立つかもしれません:
私のConfig.groovyにあるだけの場合、セッションを作成していません:
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-securityContextHolderAwareRequestFilter,-rememberMeAuthenticationFilter,-anonymousAuthenticationFilter,-exceptionTranslationFilter'
]
ただし、他のフィルターを使用せずに他の URL のセッションを作成していないため、もちろんアプリケーションは機能しません。この例は、/myapi/something リクエストによってセッションが作成されていないことを確認するためのものです。
私が持っている場合:
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS'
]
次に、すべての /myapi/something 要求に対してすべてのフィルターを通過し、セッションを作成します。他のリクエストにはフィルターを使用しません。例外行為です。
助けてくれてどうもありがとう、私は今それと戦ってきました、そしてどんなアイデアも大歓迎です!
どうもありがとう!良い一日を過ごしてください。