Как я могу использовать / получить доступ к переменным СЕАНСА в удаленном методе ColdFusion CFC?

#javascript #ajax #coldfusion #remote-access #cfc

#javascript #ajax #coldfusion #удаленный доступ #cfc

Вопрос:

У меня есть несколько методов в CFC, к которым можно получить удаленный доступ через JavaScript. Некоторые из этих методов используют переменные СЕАНСА, чтобы определить, какую логику запускать и, следовательно, какие данные возвращать.

Например, допустим, я устанавливаю переменную СЕАНСА при вызове login SESSION.IsMale .

В моем удаленном методе CFC я запускаю следующий код:

 <cffunction name="getFavoriteColor" access="remote" returntype="String">
    <cfif SESSION.IsMale>
        <cfreturn "blue" />
    </cfif>

    <cfreturn "pink" />
</cffunction>
  

Теперь я не хочу напрямую обращаться к области СЕАНСА в моем CFC. Итак, как я могу «получить доступ» к области СЕАНСА при вызове этого метода с помощью AJAX.

Я не хочу сохранять значения на странице как глобальные переменные JavaScript, поскольку это противоречит цели обеспечения их безопасности.

Комментарии:

1. Я просто хотел бы заявить, что приведенный выше пример является ЧРЕЗВЫЧАЙНО упрощенным псевдокодом. Возможно, мои методы обращаются к нескольким переменным СЕАНСА в разных точках.

2. «Я не хочу напрямую обращаться к области СЕАНСА в моем CFC» почему? и в чем вопрос?

3. @Henry потому что это нарушает инкапсуляцию.

4. Я не думаю, что это связано с инкапсуляцией. Я думаю, что правило KISS переопределяет это в данном случае. И если я забочусь о тестируемости, я могу просто использовать cfargument sess по умолчанию для #Session#

5. Я не согласен с Генри. Нарушение инкапсуляции по-прежнему является плохой вещью, которая делает ваше приложение менее ремонтопригодным. Превращение области сеанса в аргумент по умолчанию может решить эту проблему (едва ли), но тогда у вас все еще есть проблема разделения проблем. Ваш компонент не должен заботиться о своей безопасности, он должен заботиться о том, чтобы быть тем, кем он является. Вот где ColdSpring, удаленные прокси и AOP действительно могут вам помочь. Вы можете защитить свои компоненты и методы, не добавляя никакого кода безопасности в эти методы вообще. Он отделился.

Ответ №1:

Лучший ответ, который я могу предложить, — рассмотреть использование ColdSpring для создания удаленных прокси-серверов и создания перехватчиков AOP для обработки проверки.

Это намного проще, чем кажется.

Я расскажу об этом в своей презентации по обеспечению безопасности Ajax здесь: http://www.12robots.com/index.cfm/2010/8/19/My-Presentations-slides-from-cfObjective-NCDevCon-and-CFUnited

И больше об этом в документации ColdSpring здесь: http://www.coldspringframework.org/index.cfm/go/documentation

Ответ №2:

К совету Джейсона всегда стоит прислушаться, но если ColdSpring кажется слишком сложным, вы можете подумать о создании собственного простого удаленного прокси-сервера: CFC под вашим веб-корнем, предназначенного для ответа на удаленные вызовы ajax. Здесь вы пишете удаленные методы, которые затем будут взаимодействовать с другими CFC в вашей модели / сервисе (или как бы вы их ни организовали), используя их существующие API и передавая / возвращая значения из области сеанса по мере необходимости.

Эффект тот же: инкапсуляция сохраняется, а доступ контролируется.