2

Spring Security coreプラグイン1.2.7.3をにインストールGrails 2.1.1し、s2-quickstartコマンドを実行してから、bootstrap.groovyで初期ユーザーとロールを初期化しましたが、それでもログインできません。以下の関連する部分のテキストBootStrap.groovy

    if (SecRole.count == 0) {
        def fUserRole = SecRole.findByAuthority('ROLE_FlowUser') ?: new SecRole(authority: 'ROLE_FlowUser').save(failOnError: true, flush: true)
        def fAdminRole = SecRole.findByAuthority('ROLE_FlowAdmin') ?: new SecRole(authority: 'ROLE_FlowAdmin').save(failOnError: true, flush: true)

        def bf = SecUser.findByUsername('bill') ?: new SecUser(
                username: 'bill',
                password: 'eagle',
                firstName: 'bill',
                lastName: 'fly',
                email: 'bill.fly@baylorhealth.edu',
                accountExpired: false,
                accountLocked: false,
                passwordExpired: false,
                enabled: true
        ).save(failOnError: true, flush: true)

        if (!bf.authorities.contains(fAdminRole)) {
            SecUserSecRole.create bf, fAdminRole, true
        }
        if (!bf.authorities.contains(fUserRole)) {
            SecUserSecRole.create bf, fUserRole, true
        }
    }

このタイプのほとんどの質問に対する答えのように思われるので、私はブートストラップでパスワードを暗号化していません。4つのレコードすべてがデータベーステーブルに書き込まれていますが、もちろん、パスワードが正しく暗号化されているかどうかはわかりません。私の最初のコントローラーには、クラスステートメントの前に次のアノテーションがあります。

@Secured(['IS_AUTHENTICATED_FULLY'])

また、config.groovyに以下を追加しました。

// Spring Security Coreプラグインによって追加されました:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'cocktail.SecUser'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'cocktail.SecUserSecRole'
grails.plugins.springsecurity.authority.className = 'cocktail.SecRole'
grails.plugins.springsecurity.password.algorithm = 'SHA-256'
4

2 に答える 2

1

パスワードは2回エンコードされる場合があります(複数のデータソースを使用している場合は問題が発生する可能性があります)。

これを試して :

class User {
    ...
    transient bEncoded = false
    ...
    protected void encodePassword() {
        if (!bEncoded ) { 
            password = springSecurityService.encodePassword(password); 
            bEncoded = true; 
        }
    }
}
于 2012-11-08T19:47:21.860 に答える
0

私の推測では、ロールクラスにメソッドがauthorities.containsないためにチェックが失敗しています。ただし、役割がない場合(最初のチェック)、ユーザーには付与されていないため、これらのチェックを削除するだけで済みます。hashCodeequals

SecUserSecRole.create bf, fAdminRole, true
SecUserSecRole.create bf, fUserRole, true

それでも問題が解決しない場合は、パスワードエンコーディングの問題である可能性があります。SpringSecurityのデバッグログを追加すると、失敗する理由が表示されます。debug 'org.springframework.security'Config.groovyにlog4jブロックを追加します

psif (SecRole.count == 0) {は、if (SecRole.count() == 0) {またはif (!SecRole.count()) {

于 2012-11-07T19:52:10.673 に答える