본문 바로가기
Lecture/Grails

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

by cusmaker 2014. 12. 16.
반응형

안녕하세요 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으로 적용시켜보겠습니다.

수고하셨습니다.


'Lecture > Grails' 카테고리의 다른 글

Grails 몇가지 팁  (0) 2015.02.11
[Grails Part1-5] Genarate View and Controller  (0) 2014.12.17
[Grails Part1-3] Scaffolding for Basic CRUD  (0) 2014.12.16
[Grails Part1-2] Hello Grails!  (0) 2014.12.01
[Grails Part1-1] Grails 시작하기  (0) 2014.12.01