#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 и передавая / возвращая значения из области сеанса по мере необходимости.
Эффект тот же: инкапсуляция сохраняется, а доступ контролируется.