Lecture/Grails

[Grails Part1-4] Spring Security Plugin Quick Start for Grails

cocyio 2014. 12. 16. 16:08
반응형

안녕하세요 cocy입니다.

이번 시간에는 스프링 시큐리티 플러그인을 설치해볼텐데요,

스프링 시큐리티는 간단히 말해서

웹어플리케이션에 필요한 

권한 관리, 로그인 등과 같은 공통적인 기능들을 간단히 구현할 수 있도록 도와줍니다.

일단 플러그인 설치방법은 다음과 같습니다.


프로젝트 > conf > BuildConfig.groovy


많은 내용이 들어있지만,

시간관계상 가장 아래로 내려가서 

플러그인 코드블럭을 보시면됩니다.

코드블럭안에 다음 한줄을 추가해 주세요.

compile ":spring-security-core:2.0-RC4"

최신 버전을 얻으려면 

http://grails.org/plugin/spring-security-rest

이 주소로 가시면됩니다. (grails.org 에서 플러그인 > 스프링 시큐리티를 찾으시면 됩니다.)


이후 서버를 재부팅 하시면 해당 리소스를 로드하게 됩니다.


그리고 나서 실행을 해보면 로그인 창이 하나 뜰텐데요,


로그인을 하려면 몇가지 작업이 더 필요합니다.

일단 명령어창을 열고 아래의 명령어를 입력합니다.

Navigate > Open Grails Command Prompt > s2-quickstart board User Role

그럼 도메인 클래스에 User, Role, UserRole 가 추가된 것을 확인 하실 수 있습니다.

또한 Config.groovy에도 아래의 코드가 추가됩니다.


// Added by the Spring Security Core plugin:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'board.User'

grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'board.UserRole'

grails.plugin.springsecurity.authority.className = 'board.Role'

grails.plugin.springsecurity.controllerAnnotations.staticRules = [

'/':                              ['permitAll'],

'/index':                         ['permitAll'],

'/index.gsp':                     ['permitAll'],

'/assets/**':                     ['permitAll'],

'/**/js/**':                      ['permitAll'],

'/**/css/**':                     ['permitAll'],

'/**/images/**':                  ['permitAll'],

'/**/favicon.ico':                ['permitAll']

]


이후 서버를 재시작하면 다시 접속이 가능해지며, LoginController, LogoutController가 추가된 것을 확인 하실 수 있습니다.

또한 로그인 컨트롤러를 눌러보면 css속성들이 적용된 것을 확인 하실 수 있습니다.


아까만든 ArticleController을 눌러도 마찬가지로 로그인창이 뜨게 되는데요,

여기서 해당 컨트롤러에 모든 접근 권한을 허용하려면 다음의 어노테이션을 컨트롤러에 추가합니다.

package board

import grails.plugin.springsecurity.annotation.Secured

@Secured(['permitAll'])     // << 이 코드가 추가됩니다.

class ArticleController {

static scaffold = true

    //def index() { }

}


설정 내용을 보면 아시겠지만 permitAll 은 모든 접근 권한을 허용하는 설정입니다.

그렇다면, 임의의 권한을 주기위해서는 어떻게 해야할까요?


아까 보여드린 내용처럼 

스프링 시큐리티 플러그인을 설치하면 세개의 도메인이 생성이 되는데요,

이 도메인들은 각각의 테이블을 생성하게 됩니다.

이곳에 사용자 임의의 권한을 추가 할 수 있습니다.


데이터베이스에 접근하는 방법은 아직 다루지 않았지만,

Grails에서 GORM은 아주 심플하게 데이터베이스에 접근하여 데이터를 저장 할 수 있습니다.


일단 권한에 셋팅될 데이터는 서버가 부팅되면서 바로 준비가 되면 될 것 같습니다. 위치는 아래와 같습니다.

conf > BootStrap.groovy

아래의 코드를 추가해주세요.

import board.Role

import board.User

import board.UserRole


class BootStrap {


    def init = { servletContext ->

def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)     // 관리자 권한 생성

def userRole = new Role(authority: 'ROLE_USER').save(flush: true)       // 유저 권한 생성


def testUser = new User(username: 'test', password: 'test')                    

testUser.save(flush: true)                                                      // 테스트 유저 생성


UserRole.create testUser, adminRole, true                               // 테스트 계정 USER 권한 부여

    }

    def destroy = {

    }

}

 

GORM을 사용하면 

해당 도메인의 save 메소드를 호출하는 것으로 DB에 insert작업을 수행 할 수 있습니다.


그럼 다시 ArticleController.groovy로 돌아가서 

@Secured(['permitAll'])   이 코드를

@Secured(['ROLE_USER']) 로 변경해줍니다.


그럼 다시 로그인창이 뜰것이고,

test / test 로 생성한 계정으로 로그인 및 접근이 가능해집니다. ( bootstrap 파일 수정시 서버 재시작 필요 )


그럼 다음 포스팅에서는 작성자를 유저의 세션을 받아와서 username으로 적용시켜보겠습니다.

수고하셨습니다.