안녕하세요 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 |