문제

나는 Grails에 작은 WebApp을 작성하고 있으며 컨트롤러 설계 및 Gorm 사용에 대한 모범 사례에 관한 다음 질문이 있습니다.

Session.user에 사용자 객체를 저장하고 있습니다. 현재 모든 내 작업 방법은 다음 코드로 시작하여 유효한 사용자가 로그인하고 사용자 객체가 신선한 지 확인합니다.

class FooController {
  def actionMethodThatRequiresAValidUser = {
    if (!session?.user) {
      redirect(controller: "authentication", action: "login")
    }
    session.user.refresh()
    ...
    /* do stuff */
    ...
  }
}

그게 모범 사례인가요? 더 좋고/또는 간결한 방식으로 할 수 있습니까?

도움이 되었습니까?

해결책

a 필터, 이렇게하면 동일한 반복 코드를 필터에 넣고 컨트롤러가 실제 작업에 집중할 수 있습니다.

다른 팁

interceptor 이전에 사용하는 것이 적절하다고 생각합니다. JSecurity 플러그인. 사용자 인증의 경우 JSECURITY 플러그인은 매우 유용합니다.

이것을 a로 정의하려고 시도 할 수 있습니다 필터 보다는 복제 코드.

나는 다른 사람들이 한 필터 제안에 동의합니다. 그것이 당신에게 효과가 없다면, 당신은 interceptor 전에 컨트롤러에서 일부 복제를 최소화하십시오.

당신은 겪었습니까? 스프링 보안 코어.
보안 목적을위한 좋은 프레임 워크입니다 ..

더 나은 접근 방식은 필터를 사용하는 것입니다 (이전) 및 if (! session? .user) {리디렉션 (컨트롤러 : "인증", 조치 : "로그인")}이 코드는 필터에 있습니다.

두 번째로 스프링 보안 플러그인을 사용하여 사용자 세션에 대해 걱정할 필요가 없으면 자동으로 제어 할 수 있습니다. 보다 http://blog.springsource.org/2010/08/11/simplified-spring-security-with-grails/플러그인에 대한 자세한 정보

살펴보십시오 스프링 보안 코어 플러그인 이것은 보안 목적을위한 풍부한 프레임 워크입니다. 당신은 사용할 수 있습니다 springSecurityService.isLoggedin() 방법 프레임 워크를 주입 한 후, 프레임 워크는 보일러 플레이트가 필요하지 않은 훨씬 더 미세한 액세스 및 권한 제어를 제공합니다.

import grails.plugins.springsecurity.Secured

@secured ([ 'role_admin', 'role_sub_admin', 'role_user']))))

클래스 DashboardController {

def create () {

    [bankInstance: new Bank(params)]

}

def save() {
    def bankInstance = new Bank(params)
    if (!bankInstance.save(flush: true)) {
        render(view: "create", model: [bankInstance: bankInstance])
        return
    }

    flash.message = message(code: 'default.created.message', args: [message(code: 'bank.label', default: 'Bank'), bankInstance.id])
    redirect(action: "show", id: bankInstance.id)
}

당신은 또한 시도 할 수 있습니다 성배용 Apache Shiro 플러그인

사용 스프링 보안 코어.... 시스템에서 사용법 (사용자)의 맵 역할 .. 플러그인을 설치하는 동안 동일하게 구성 ... Bootstrap에서 관리자 사용자를 만드는 것을 잊지 마십시오 ...

Spring Security Core와 같은 완전히 안전한 답변을 찾고 있지 않은 경우 Grails 문서 의이 코드를 필터로 사용할 수 있습니다.

class SecurityFilters {
   def filters = {
       loginCheck(controller:'*', action:'*') {
           before = {
              if(!session.user && !actionName.equals('login')) {
                  redirect(action:'login')
                  return false
               }
           }
       }
   }
}

나는 두 번째 스프링 보안. 당신은 여기에서 바퀴를 재창조하려고합니다. 이 모든 것이 당신과 더 많은 것을 위해 이루어졌습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top