2016-04-26 13 views
2

私が使用しているアプリケーションでは、Grails 3を使用しています。このarticleに記載されているように、事前認証を試みていますが、正規のものを無効にする方法がわかりませんgrails 3 spring security pluginによって提供される認証。Grails 3 Springセキュリティ事前認証

私の現在のシナリオは次のとおりです。ユーザーAが自分のWebページにヒットします。私はリクエストのヘッダーを解析し、役割とユーザー名の情報を取り出したいと思っています。ユーザー名またはロールが空の場合、ユーザーを一部のゲートウェイにリダイレクトします。簡単に言えば、私は、プラグインによって提供される静的ルールを呼び出すことによって、認可にのみ春のセキュリティを使用したいと思います。すなわち

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    [pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"], 
    [pattern: '/cools/**', access: ['ROLE_ADMINS']], 
    [pattern: '/*', access: 'isAuthenticated()'] 
] 

これは私がfirst article状態として、我々は唯一の認証のためにそれを使用することができ、任意のログイン機能を実行するために春のセキュリティを必要としません。理由です私が試してみました何

まず、私は、私のapplication.groovyファイル(プラグインのクイックスタートを実行したときにデフォルトで作成された)、すなわち、接続文字列、検索フィルタ内のすべての認証関連の呼び出しを削除しましたon stackこのon blog:しかしない静的なルール

次に、私はこれらの2つのポストが提供するソリューションを使用しようとしました。

私は私のブート設定は次のようになりますAbstractPreAuthenticatedProcessingFilter

package Cool.service.authentication 
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter 
import javax.servlet.http.HttpServletRequest 

class CGAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter { 
    @Override 
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { "username" } 

    @Override 
    protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { "N/A" } 
} 

を拡張するためのフィルターを作成しました:

import grails.plugin.springsecurity.SecurityFilterPosition 
import grails.plugin.springsecurity.SpringSecurityUtils 

class BootStrap { 

    def init = { servletContext -> 
     SpringSecurityUtils.clientRegisterFilter('CGAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order) 
    } 
} 

そして、私の春のリソースは次のようになります。

import Cool.service.authentication.CGAuthenticationFilter 

beans = { 
    myAuthenticationFilter(CGAuthenticationFilter) { 
     authenticationManager = ref('authenticationManager') 
     checkForPrincipalChanges = true 
    } 
} 

そして、最後に、私のapplication.groovyの設定にこの行を追加しました。 yのプラグイン:

grails.plugin.springsecurity.providerNames = ['preAuthenticatedAuthenticationProvider', 'anonymousAuthenticationProvider'] 

サーバが起動し、「失敗」、アプリを実行しようとすると、しかし、私はスーパーgeneircエラーを取得していますし、Javaが戻ってゼロ以外の値を返します。これは私が間違った方向に向いていると信じさせ、実装は完全に間違っています

+0

なぜあなたはSpringのセキュリティを無効にしますか?何を試しましたか?そして、何が達成される必要があるかについてのいくつかの種類の使用シナリオを辿ってください。 –

+0

@MikelisBaltruksよろしくお願いします。私は春のセキュリティを無効にしたくない、ログイン機能を無効にするだけです。ヘッダーには必要な情報が含まれています。 &ユースケースのシナリオは第2段落から始まります – angryip

答えて

2

問題を解決するために、いくつかのファイルを変更する必要がありました。まず、私のブートストラップファイルは今、次のinitブロック含まれています

SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER) 

私の豆を(resources.groovy)ファイルは、現在含まれています。それ以外は

userDetailsService(grails.plugin.springsecurity.userdetails.GormUserDetailsService) { 
    grailsApplication = ref('grailsApplication') 
} 

userDetailsByNameServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) { 
    userDetailsService = ref('userDetailsService') 
} 

preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) { 
    preAuthenticatedUserDetailsService = userDetailsByNameServiceWrapper 
} 

requestHeaderAuthenticationFilter(Cool.service.authentication.GCHeaderAuthenticationFilter) { 
    authenticationManager = ref('authenticationManager') 
} 

を、他の構成は正しいです。

関連する問題