2016-09-10 20 views
0

私はintellijで新しいGrails(2.4.4)プロジェクトを開始し、春のセキュリティをインストールするためにcompile ":spring-security-core:2.0.0"を追加しました。その後、s2-quickstart io.mylife.feedmyface User Roleを実行して、User、Role、UserRoleというドメインクラスを生成しました。これもうまくいきました。私は2人のロールとユーザーでも正常にブートストラップしました。次に、ログイン&ログアウトコントローラと、ログインビューをそれぞれtarget/work/plugins/spring-security-core-2.0.0/grails-app/controllers/grails/plugin/springsecuritytarget/work/plugins/spring-security-core-2.0.0/grails-app/views/loginからコピーしました。ここで問題が発生します。多くの輸入品や他のキーワードはintellijによって赤色にマークされ、ポップアップcannot resolve symbol 'Secured'などが表示されます。ビューでは、いくつかの同様のエラーが発生します。 <div class='errors'><g:message code="springSecurity.denied.message" /></div>の場合、springSecurity.denied.messageには赤色のポップアップcannot resolve property keyが表示されます。過去に私が気付いたcozは、生成されたコードが時には実際の問題を引き起こすことなくそれをすることに気がついたけれど、私はその意見を心配していません。私はちょうどコントローラを修正する方法を知りたいです。私のベースをカバーするために、私はPostgreSQLデータベースを使用していると言いますが、それが違いになるのではないでしょうか?私は詳細を提供する必要がある場合はお知らせください。ここでcontollers'コードです:Grails、spring security - ログインコントローラのインポートが機能しない

LoginController:

/* Copyright 2013-2015 the original author or authors. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 
package io.mylife.feedmyface 

import grails.converters.JSON 

import javax.servlet.http.HttpServletResponse 

/* 'security is red on all of the below imports'*/ 
import org.springframework.security.access.annotation.Secured 
import org.springframework.security.authentication.AccountExpiredException 
import org.springframework.security.authentication.CredentialsExpiredException 
import org.springframework.security.authentication.DisabledException 
import org.springframework.security.authentication.LockedException 
import org.springframework.security.core.context.SecurityContextHolder as SCH 
import org.springframework.security.web.WebAttributes 

@Secured('permitAll') // 'Secured' is red 
class LoginController { 

/** 
* Dependency injection for the authenticationTrustResolver. 
*/ 
def authenticationTrustResolver 

/** 
* Dependency injection for the springSecurityService. 
*/ 
def springSecurityService 

/** 
* Default action; redirects to 'defaultTargetUrl' if logged in, /login/auth otherwise. 
*/ 
def index() { 
    if (springSecurityService.isLoggedIn()) { 
     redirect uri: SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl 
    } 
    else { 
     redirect action: 'auth', params: params 
    } 
} 

/** 
* Show the login page. 
*/ 
def auth() { 

    def config = SpringSecurityUtils.securityConfig 

    if (springSecurityService.isLoggedIn()) { 
     redirect uri: config.successHandler.defaultTargetUrl 
     return 
    } 

    String view = 'auth' 
    String postUrl = "${request.contextPath}${config.apf.filterProcessesUrl}" 
    render view: view, model: [postUrl: postUrl, 
           rememberMeParameter: config.rememberMe.parameter] 
} 

/** 
* The redirect action for Ajax requests. 
*/ 
def authAjax() { 
    response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl 
    response.sendError HttpServletResponse.SC_UNAUTHORIZED 
} 

/** 
* Show denied page. 
*/ 
def denied() { 
    if (springSecurityService.isLoggedIn() && 
      authenticationTrustResolver.isRememberMe(SCH.context?.authentication)) { 
     // have cookie but the page is guarded with IS_AUTHENTICATED_FULLY 
     redirect action: 'full', params: params 
    } 
} 

/** 
* Login page for users with a remember-me cookie but accessing a IS_AUTHENTICATED_FULLY page. 
*/ 
def full() { 
    def config = SpringSecurityUtils.securityConfig 
    render view: 'auth', params: params, 
     model: [hasCookie: authenticationTrustResolver.isRememberMe(SCH.context?.authentication), 
       postUrl: "${request.contextPath}${config.apf.filterProcessesUrl}"] 
} 

/** 
* Callback after a failed login. Redirects to the auth page with a warning message. 
*/ 
def authfail() { 

    String msg = '' 
    def exception = session[WebAttributes.AUTHENTICATION_EXCEPTION] 
    if (exception) { 
     if (exception instanceof AccountExpiredException) { // 'AccountExpiredException' is red 
      msg = g.message(code: "springSecurity.errors.login.expired") 
     } 
     else if (exception instanceof CredentialsExpiredException) { // 'CredentialsExpiredException' is red 
      msg = g.message(code: "springSecurity.errors.login.passwordExpired") 
     } 
     else if (exception instanceof DisabledException) { // 'DisabledException' is red 
      msg = g.message(code: "springSecurity.errors.login.disabled") 
     } 
     else if (exception instanceof LockedException) { // 'LockedException' is red 
      msg = g.message(code: "springSecurity.errors.login.locked") 
     } 
     else { 
      msg = g.message(code: "springSecurity.errors.login.fail") 
     } 
    } 

    if (springSecurityService.isAjax(request)) { 
     render([error: msg] as JSON) 
    } 
    else { 
     flash.message = msg 
     redirect action: 'auth', params: params 
    } 
} 

/** 
* The Ajax success redirect url. 
*/ 
def ajaxSuccess() { 
    render([success: true, username: springSecurityService.authentication.name] as JSON) 
} 

/** 
* The Ajax denied redirect url. 
*/ 
def ajaxDenied() { 
    render([error: 'access denied'] as JSON) 
} 
} 

LogoutController:それは、ログインとログアウトのコントローラをコピーする必要はありません

/* Copyright 2013-2015 the original author or authors. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 
package io.mylife.feedmyface 

import javax.servlet.http.HttpServletResponse 

/* Again, 'security' is red */ 
import org.springframework.security.access.annotation.Secured 
import org.springframework.security.web.RedirectStrategy 

@Secured('permitAll') // 'Secured' is red 
class LogoutController { 

/** Dependency injection for RedirectStrategy. */ 
RedirectStrategy redirectStrategy // 'RedirectStrategy' is red 

/** 
* Index action. Redirects to the Spring security logout uri. 
*/ 
def index() { 

    if (!request.post && SpringSecurityUtils.getSecurityConfig().logout.postOnly) { 
     response.sendError HttpServletResponse.SC_METHOD_NOT_ALLOWED // 405 
     return 
    } 

    // TODO put any pre-logout code here 
    redirectStrategy.sendRedirect request, response, SpringSecurityUtils.securityConfig.logout.filterProcessesUrl // '/j_spring_security_logout' 
    response.flushBuffer() 
} 
} 
+0

ログインとログアウトコントローラをコピーする必要はありません。ビュー "auth.gsp"だけをコピーしてください。プラグインを追加した後、アプリケーションをコンパイルしてください。 –

答えて

1

。 bootstrap.groovyでサンプルユーザーと役割を作成したら、@secureアノテーションを使用するか、config.groovyの要求マッピングを使用して、カスタムコントローラへのアクセス許可を設定するだけです。詳細はプラグインのドキュメントの tutorialを参照してください。

+0

ありがとうございます。私はいつもあなたのプロジェクトにログイン/ログアウトコントローラをコピーする必要があると思っていました。私はここに挿入するfacepalm絵文字が必要ですlol – PrintlnParams

+0

私は助けることができてうれしい。 –

関連する問題