سؤال

أنا أكتب صغيرة webapp في الكؤوس و لدي سؤال بخصوص أفضل الممارسات لتصميم وحدة تحكم باستخدام GORM:

أنا تخزين كائن المستخدم في الدورة.المستخدم.حاليا كل أساليب عمل تبدأ مع التعليمات البرمجية التالية للتأكد من صالح المستخدم هو تسجيل الدخول و ذلك كائن المستخدم هو جديد:

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

هو أن أفضل الممارسات ؟ يمكن أن يتم ذلك في تحسين و/أو أكثر إيجازا الطريقة ؟

هل كانت مفيدة؟

المحلول

استخدام فلتر, بتلك الطريقة يمكنك وضع نفس تكرار الرمز في تصفية والحفاظ على وحدات تحكم تركز على العمل الحقيقي.

نصائح أخرى

وأعتقد باستخدام beforeInterceptor هو appropriate.And إعطاء بعض نظرة على هذا JSecurity المساعد . للحصول على مصادقة المستخدم jsecurity البرنامج المساعد هو مفيد للغاية.

وكنت قد تحاول تحديد هذا بمثابة تصفية بدلا من <لأ href = "HTTP: // داخلي. wikipedia.org/wiki/Code_duplication "يختلط =" نوفولو noreferrer "> تكرار كود .

أنا أتفق مع فلتر اقتراحات جعلت الآخرين.إذا كان هذا لا يعمل بالنسبة لك ، يمكنك تحديد beforeInterceptor على وحدة التحكم الخاصة بك للحد من بعض الازدواجية أيضا.

هل ذهبت من خلال الربيع الأمن الأساسية .
إنها إطار لطيفة لأغراض أمنية ..

وهناك العديد من الطرق النهج الأفضل هو استخدام فلتر (قبل) ووضع إذا (! الجلسة؟ .user) {       إعادة توجيه (وحدة تحكم "المصادقة"، والعمل: "الدخول")     } هذا الرمز في التصفية.

والشيء الثاني الذي يمكن استخدام البرنامج المساعد أمن الربيع بحيث لم يكن لديك ما يدعو للقلق جلسة عمل المستخدم وسوف تحكم تلقائيا. يمكنك الاطلاع على http://blog.springsource.org/2010 / 08/11 / مبسطة الربيع الأمن، مع الكؤوس المقدسة / لمزيد من المعلومات حول البرنامج المساعد

وإلقاء نظرة على الأمن الربيع الأساسية المساعد حيث هو إطار غنية للأمن المقاصد. يمكنك استخدام الأسلوب springSecurityService.isLoggedin() بعد حقن الإطار، ولكنها توفر إطارا لكثير الوصول أدق وامتياز الضوابط التي تجنب أيضا على ضرورة النمطي.

import grails.plugins.springsecurity.Secured

وSecured ([ 'ROLE_ADMIN'، 'ROLE_SUB_ADMIN'، 'ROLE_USER'])

والطبقة DashboardController {

وإنشاء صفر () {

    [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)
}

استخدم الربيع الأمن الأساسية .... خريطة دور الأعراف (المستخدم) في نظام .. تكوين في نفس الوقت تثبيت البرنامج المساعد ... ولا تنسى لإنشاء المستخدم المسؤول على ألبس الحذاء ...

إذا كنت لا تبحث عن إجابة آمنة تماما، مثل الربيع الأمن الأساسية، يمكنك استخدام هذا الرمز من وثائق الكؤوس المقدسة كمرشح:

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