2016-08-16 1 views
0

Grails 애플리케이션에서 spring-security-core : 2.0.0을 사용 중입니다. 그러나 성공적인 인증 후에도 페이지에는 '죄송합니다.이 페이지를 볼 권한이 없습니다.'라는 메시지가 표시됩니다. ROLE_ADMIN (으)로 로그인 했으므로 역할에 따라 두 페이지로 리디렉션하고 싶습니다. 관리자 역할에 대해서는 관리자 페이지로 이동해야하며 사용자 역할에 대해서는 사용자 페이지로 이동하려고합니다.spring-security-core의 인증 문제 : 2.0.0

가 여기 내 UrlMappings.groovy입니다

class UrlMappings { 

    static mappings = { 
     "/$controller/$action?/$id?"{ 
     constraints { 
      // apply constraints here 
     } 
     } 

    /* get "/"(controller:"book", action:"index") 
     get "/books/create"(controller:"book", action:"create") 
     post "/books"(controller:"book", action:"save") 
     get "/books/$id"(controller:"book", action:"show") 
     get "/books/$id/edit"(controller:"book", action:"edit") 
     put "/books/$id"(controller:"book", action:"update") 
     delete "/books/$id"(controller:"book", action:"delete") 
    */ 

     "/"(view:'auth',controller:'login') 
     "/admin"(view:'adminPage') 

     "500"(view:'/error') 
    } 
} 

LoginController.groovy는

package com.standout.utilityapplication 

import grails.plugin.springsecurity.annotation.Secured 

class LoginController { 

    def springSecurityService 

    @Secured(['ROLE_ADMIN', 'ROLE_USER']) 
    def index() { 
     println "INDEX PAGE RENDER FROM MY CONTROLLER"; 
     def roles = springSecurityService.getPrincipal().getAuthorities() 
     println roles; 

     if(roles.toString().contains("ROLE_ADMIN")) 
     { 
     println "admin" 
     redirect(uri: "/admin") 
     } 
     else 
     { 
     println "not admin" 
     redirect(uri: "/dataentry") 
     } 
    } 

    @Secured('ROLE_USER') 
    def nonadmin() 
    { 
     println("===notadmin") 
    } 

    @Secured('ROLE_ADMIN') 
    def admin() 
    { 
     println("====admin") 
    } 
} 

답변

0

나는 문제가 당신의 UrlMapping 항목과 보안 설정에 의해 발생합니다 생각합니다.

첫째, "/"변경해보십시오 (보기 : '인증'컨트롤러 '로그인')

"/"(controller:'login') 

로 즉, 당신이 성공적으로 인증되면 당신은 당신의 인 LoginController의 correclty로 이동 보장합니다. 현재의 엔트리는, LoginController에 대응하는 액션을 가지지 않는 auth.gsp를 렌더링하려고합니다. 컨트롤러 만 지정되면 해당 컨트롤러의 인덱스 작업이 기본적으로 호출됩니다.

둘째, 다른 UrlMapping 용의 Config.groovy 파일에 controllerAnnotation.staticRules 값을 지정 "/ 관리"(뷰 'adminPage')

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    '/adminPage' : ['ROLE_ADMIN'] ] 

이 올바른 권한을 보장을 위해 구성된 adminPage 정적 뷰/admin은 UrlMapping을 기반으로/adminPage로 결정됩니다.

자세한 내용은 다음 Spring Security 문서를 참조하십시오. http://grails-plugins.github.io/grails-spring-security-core/v2/guide/requestMappings.html#securedAnnotations