<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-723413149486794228</id><updated>2024-09-04T23:20:05.544+03:00</updated><category term="книги"/><category term="мнение"/><category term="jasig cas"/><category term="java"/><category term="spring"/><category term="sso"/><category term="методология"/><category term="разработка"/><category term="хакинг"/><category term="book review"/><category term="disclosure"/><category term="facebook"/><category term="full text search"/><category term="fuzzing"/><category term="google analytics"/><category term="hack"/><category term="info"/><category term="linkedin"/><category term="lucene"/><category term="mongodb"/><category term="nosql"/><category term="oracle"/><category term="spring-security"/><category term="администрирование"/><category term="аналитика"/><category term="интерфейс"/><category term="информационная безопасность"/><category term="мнения"/><category term="настройка"/><category term="обзор"/><category term="переговоры"/><category term="психология"/><category term="тестирование"/><category term="эксплоиты"/><title type='text'>insane code monkey&#39;s blog</title><subtitle type='html'>личные впечатления по поводу книг, программирования, управления процессом разработки программного обеспечения.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-4872293651819907197</id><published>2011-09-27T11:32:00.000+04:00</published><updated>2011-09-27T11:32:37.443+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book review"/><category scheme="http://www.blogger.com/atom/ns#" term="fuzzing"/><title type='text'>Open Source Fuzzing Tools</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPma-bqVbHdsBUULJVi57r0VvfDJxB01_psxoh3xItZEKm3sPKLOBizGVHZqI3J_V0sAmv1iGKl48FxjNeETq2JVyhrSMoCzNMoHM6Sl8gpVsVZq_ATL0SeDnd6hhiWD1TRsTNURxfj0KR/s1600/OSFT.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPma-bqVbHdsBUULJVi57r0VvfDJxB01_psxoh3xItZEKm3sPKLOBizGVHZqI3J_V0sAmv1iGKl48FxjNeETq2JVyhrSMoCzNMoHM6Sl8gpVsVZq_ATL0SeDnd6hhiWD1TRsTNURxfj0KR/s1600/OSFT.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Небольшая книга по фаззингу издательства &lt;a href=&quot;http://syngress.com/&quot;&gt;Syngress&lt;/a&gt; от группы авторов, среди которых фигурирует всем известный Чарли Миллер (&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;@0xcharlie&lt;/a&gt;). Книгу можно рассматривать как введение в фаззинг. Содержание книги раскрывает различные аспекты фаззинга в 10&amp;nbsp;соответствующих&amp;nbsp;главах.&amp;nbsp;Правда объем книги (200 страниц) не позволяет раскрыть темы достаточно подробно.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Глава 1 (Introduction to vulnerability research)&amp;nbsp;&lt;/b&gt;достаточно традиционна для подобного рода книг и объясняет основные классы программных ошибок и вкратце описывает подходы к поиску ошибок и уязвимостей. Большинство может пропустить 10 страниц, которые занимает первая глава, так как понятия buffer overflow, black/white box testing встречаются в каждой второй книжке по ИБ.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Глава 2 (Fuzzing - What&#39;s That?) &lt;/b&gt;будет интересна тем, кто до этого не сталкивался с понятием фаззинга. Приведен небольшой экскурс в историю, приводится ретроспектива развития идей, основные области применения фаззинга как инструмента. В главе упоминаются ведущие вендоры коммерческих решений в области фаззинга и их продукты.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Глава 3 (Building a Fuzzing Environment) &lt;/b&gt;должна&amp;nbsp;раскрывать по идее вопросы построения среды для фаззинга. На деле - содержательная часть главы приводит перечень программных средств, используемых для процессов отладки, мониторинга за поведением процессов для Windows, Linux и OSX. Большей части разработчиков знакомы такие вещи как Windbg, OllyDBG, IDAPro, gdb, valgrind. Как-то совсем бедно на этом фоне выглядит упоминание XCode для OSX.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Четвертая глава (Open Source Fuzzing Tools) и пятая (Commercial Fuzzing Solutions) &lt;/b&gt;представляют собой перечисление бесплатных и коммерческих решений с кратким описанием, указанием области применения. Стоит отметить, что существенная часть приведенных бесплатных фаззеров не поддерживается и не развивается достаточно продолжительное время. Описание коммерческих решений более красочное за счет иллюстраций графических интерфейсов. &lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Шестая глава (Build Your Own Fuzzer&lt;/b&gt;&lt;b&gt;) &lt;/b&gt;содержит описание основных составных частей средства фаззинга, вводит некоторое понятие базисного словаря фаззинга,&amp;nbsp;вскользь упоминает о простом автомате и применимости этой модели к процессу фаззинга. В конце главы читателю предлагается создать собственный простой фаззер при помощи языка Perl.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Содержание седьмой и восьмой главы (Integration of Fuzzing in the Development Cycle и Standtartization and Certification) &lt;/b&gt;в большей степени направлено на людей занимающихся в софтверных компаниях вопросами QA и тестирования. В данных главах фаззинг рассматривается как элемент непрерывного и комплексного тестирования программных продуктов. Делается акцент на то, какие именно программные ошибки могут быть обнаружены средствами фаззинга. Шестая глава предлагает вариант плана по организации фаззинга, который отвечает на основные вопросы: кто, что, как, сколько будет фаззить. Приводится список наиболее часто встречаемых проблем при организации системного процесса фаззинга и пути их решения.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Глава 9 (What is a File?) &lt;/b&gt;рассматривает файлы как входную точку для фаззинга приложений. Приводится ряд популярных текстовых и бинарных форматов, подходы к анализу форматов файлов и их содержимого, список популярных hex-редакторов. В конце главы приводится ряд файловых фаззеров с краткими описаниями.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Глава 10 (Code coverage and fuzzing) &lt;/b&gt;на мой взгляд во всей книге самая содержательная, посвящена вопросам повышения эффективности методик фаззинга посредством анализа степени покрытия логики тестируемого приложения. Глава предлагает методы инструментализации программных продуктов как с доступным исходным кодом, так и закрытых решений. На достаточно простом примере показано, каким образом можно увеличить процент покрытия тестами целевого приложения.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Книга достаточно простая, без особых технических подробностей и вряд ли будет интересна техническим специалистам, занимающимися поиском уязвимостей. Содержание книги может быть передано в 2-3 статьях. Можно рекомендовать данную книгу техническим менеджерам,&amp;nbsp;ответственным&amp;nbsp;за сегмент QA и тестирование продуктов, желающим повысить безопасность и защищенность выпускаемого программного обеспечения. Приведенные списки утилит, средств и готовых программных сред для фаззинга могут помочь сориентироваться при выборе решения и организации плана по тестированию на уязвимости.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вызывает вопрос и высокая стоимость книги (65$ на amazon), что в полтора раза больше чем более интересная и содержательная (даже по страницам 2,5 раза толще)&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/Fuzzing-Brute-Force-Vulnerability-Discovery/dp/0321446119/&quot;&gt;Fuzzing: Brute Force Vulnerability Discovery&lt;/a&gt;. К тому же, вот уже как 2 года продается ее русскоязычный &lt;a href=&quot;http://www.ozon.ru/context/detail/id/5001471/&quot;&gt;вариант&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/4872293651819907197/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/4872293651819907197' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/4872293651819907197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/4872293651819907197'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2011/09/open-source-fuzzing-tools.html' title='Open Source Fuzzing Tools'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPma-bqVbHdsBUULJVi57r0VvfDJxB01_psxoh3xItZEKm3sPKLOBizGVHZqI3J_V0sAmv1iGKl48FxjNeETq2JVyhrSMoCzNMoHM6Sl8gpVsVZq_ATL0SeDnd6hhiWD1TRsTNURxfj0KR/s72-c/OSFT.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-3815099671647081721</id><published>2011-05-28T17:02:00.000+04:00</published><updated>2011-05-28T17:02:06.461+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="disclosure"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="hack"/><category scheme="http://www.blogger.com/atom/ns#" term="info"/><category scheme="http://www.blogger.com/atom/ns#" term="linkedin"/><title type='text'>Социальные сети как средство поиска информации по email.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Представим следующую ситуацию: вы получили тем или иным способом список email и хотели бы провести адресную рассылку. При этом, вам бы хотелось увеличить вероятность отклика каждого пользователя на ваше письмо. Для достижения этой цели было бы неплохо знать имя и фамилию владельца почтового ящика или дополнительную информацию о пользователе, чтобы указать ее в теме или теле письма. И тут на помощь могут прийти социальные сети. На первый взгляд, охране информации о почтовых адресах пользователей уделяется большое внимание, но существует механизм, который допускает получение информации о соответствии адреса и учетной записи в социальной сети.&amp;nbsp;Я имею ввиду механизм, позволяющий проводить поиск ваших друзей по списку почтовых контактов.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Данная функция присутствует в таких социальных сетях как facebook и linkedin. Первая охватывает практически всех интернет-активных пользователей, вторая содержит информацию о месте работы и роде занятий пользователя (данная информация может быть также полезна для составления тела посылаемого сообщения). Ситуация упрощается тем, что обе социальные сети позволяют загружать список контактов в виде файла. Facebook требует контакты в формате экспорт-файлов Thunderbird, Microsoft Outlook Express или Apple Mail. Это не является серьезным препятствием, и проблема решается написанием небольшой утилиты. Так, например, для перегонки файла с контактами в формат Thunderbird достаточно 15 строк на python. В случае с linkedin все еще проще, так как сеть позволяет грузить файлы в txt и csv форматах.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Наиболее удобный формат представления найденных пользователей у facebook. Результаты поиска представляют список обнаруженных пользователей и содержат как имя, так и почтовый адрес. Linkedin в этом плане более скуп на данные - показывает только список, содержащий имена пользователей. Кроме того, у linkedin есть еще одна особенность. Заключается в том, что linkedin запоминает все контакты, по которым проводился поиск и каждый новый поисковый результат содержит данные предыдущих поисков. Это опять же не слишком усложняет жизнь, так как возможно написание вспомогательной утилиты, решающей данную проблему. Алгоритм работы можно предложить следующий: каждый раз разрешать только один адрес и результаты поиска сравнивать с локально сохраненными результатами предыдущего поиска. Таким образом единственная разница в списках и будет соответствовать искомому почтовому адресу. 15 строчками на python тут конечно дело не обойдется, но много времени на разработку уйти не должно.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Еще немного о том, как можно использовать полученные данные. Как уже говорил, можно использовать информацию о месте работе, профессии для составления пробивного содержания письма. Аналогичным способом может быть использована информация о друзьях пользователя. Так, например, можно составить сообщение от имени друга пользователя (сослаться на новый почтовый ящик) и использовать полный спектр средств социальной инженерии - упрашивать пользователя перейти по ссылке, запустить exe из аттачмента или выслать список контактов.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Данный способ был опробован на наиболее популярных социальных сетях facebook и linkedin, но аналогичный функционал может присутствовать и в других, в том числе и региональных.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/3815099671647081721/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/3815099671647081721' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/3815099671647081721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/3815099671647081721'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2011/05/email.html' title='Социальные сети как средство поиска информации по email.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-6352417215681673574</id><published>2010-11-12T13:54:00.000+03:00</published><updated>2010-11-12T13:54:38.638+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="full text search"/><category scheme="http://www.blogger.com/atom/ns#" term="lucene"/><category scheme="http://www.blogger.com/atom/ns#" term="mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="nosql"/><title type='text'>Полнотекстовый поиск и mongodb.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Не буду вдаваться в подробности каким образом я дошел до использования не-sql базы данных, скажу лишь, что в определенный момент мой мозг отказался вталкивать предметную область&amp;nbsp; одного из проектов в чужеродную ей реляционную модель. Данные не были формализованы, формат представления грозился сильно меняться со временем, а отдельные объекты угрожали обрасти атрибутами, о которых на момент проектирования я мог и не подозревать. Атакованный со всех сторон заманчивыми лозунгами nosql, я пустился во все тяжкие и, махнув рукой на неизведанность, принялся выбирать nosql решение. Среди многообразия предлагаемых систем моим разумом удалось завладеть только &lt;a href=&quot;http://www.mongodb.org/&quot;&gt;MongoDB&lt;/a&gt;. MongoDB - документоориентированная база данных, хранящая объекты в JSON формате, предоставляющая интерфейс запросов, mapReduce, автоматические репликации, шардинг и много чего другого вкусного, от чего очень сложно устоять. Более подробно и детально о всех преимуществах и недостатках можно легко узнать из&amp;nbsp; &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Home&quot;&gt;раздела документации проекта&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;За время работы над информационными системами у меня сложилось стойкое представление о том, что эффективность информационной системы в большей степени формируется качеством и скоростью работы поискового механизма. А так как все более и более превалируют объемы неструктурированной информации на первый план выходит возможность полнотектового поиска. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Являясь поклонником postgresql, с удовольствием использовал предоставляемый этой СУБД механизм создания индексов для полнотекстового поиска. PostgreSQL позволяет получить качественный полнотекстовый поиск &quot;из коробки&quot; сведя к минимуму необходимые затраты на модификацию приложения.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Сложно, привыкнув к теплу и комфорту, сталкиваться с проблемой отсутствия аналогичного встроенного решения в MongoDB. Очень хотелось обойтись малой кровью и не влезать в долгосрочное изучение таких монстров как Lucene и Sphinx. Возможно решение на основе данных вариантов было бы гораздо лучше, но дефицит времени не оставлял выбора. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Стоит признать, что разработчики знают о данной проблеме и в списках рассылки поднималась тема внедрения механизма полнотекстового поиска, на трекере проекта создан тикет с точкой фиксации на версии 1.7.x. Так, что вполне возможно, что через год данная статья потеряет свою актуальность.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Благодаря возможности создавать индексы для вложенных в документ массивов, в качестве частичного решения можно рассмотреть &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo&quot;&gt;следующий вариант&lt;/a&gt;. Разработчику предлагается выделить в рамках документа специальный атрибут, хранящий массив слов для поиска. Этот массив индексируется средствами mongodb и используется для поиска. Формирование данного массива полностью ложится на плечи разработчика. Создание индекса на данный массив позволит получить адекватную скорость выборки. Сразу можно отметить недостатки, а именно: необходимость дополнительной разработки функционала уровня DAO, а также разнообразие словоформ и малозначащие слова, которые существенно влияют на качество поиска. Относительно первого пункта не остается ничего кроме как мириться, ибо лезть внутрь сервера mongod и прикручивать полнотекстовый поиск - явно не та задача над которой хотелось тратить свое время. Со вторым пунктом можно справиться при помощи &lt;a href=&quot;http://en.wikipedia.org/wiki/Stemming&quot;&gt;стемминга&lt;/a&gt; и фильтрации стоп-слов. Инструмент для реализации задуманного долго искать не пришлось, - все необходимое оказалось в Lucene.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Рассмотрим ситуацию, когда у документа есть текстовое поле, по которому необходимо будет проводить поиск. Назовем его text:&lt;/div&gt;&lt;pre class=&quot;javascript&quot; name=&quot;code&quot;&gt;{
    _id: &quot;id&quot;,
    text: &quot;content of War and Peace of Leo Tolsoy here&quot;
}
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Можно предложить разделить простое содержимое на два поля: text.content и text.tsearch, где в content непосредственно будет располагаться оригинал текста, а tsearch будет содержать массив нормализованных слов для поиска. В результате документ примет вид:&lt;/div&gt;&lt;pre class=&quot;javascript&quot; name=&quot;code&quot;&gt;{
    _id: &quot;id&quot;,
    text: {
        content: &quot;content of War and Peace of Leo Tolsoy here&quot;,
        tsearch: [&quot;content&quot;, &quot;war&quot;, &quot;peac&quot;, &quot;leo&quot;, &quot;tolstoy&quot;, &quot;here&quot;]
    }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Важно не забыть создать индекс на tsearch: &lt;b&gt;db.mydocs.ensureIndex({&quot;text.tsearch&quot;: 1}).&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Остальная работа сводится к написанию вспомогательной функции, которая на вход получает строку а на выходе выдает список слов, прошедших стемминг и фильтрацию на стоп-слова. Используем классы, предоставляемые библиотекой lucene-core:&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;private List&amp;lt;String&amp;gt; getTSearchList(String text) {
    List&amp;lt;String&amp;gt; searchTerms = new ArrayList&amp;lt;String&amp;gt;();
    Analyzer analyzer = new SnowballAnalyzer(LUCENE_30, &quot;English&quot;, StandardAnalyzer.STOP_WORDS_SET);
    TokenStream tokenStream = analyzer.tokenStream(&quot;contents&quot;, new StringReader(text));
    TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
    try {
        while( tokenStream.incrementToken() ) {
            searchTerms.add(termAttribute.term());
        } 
    } catch (IOException ignore) {}
    return searchTerms;
}
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Существует несколько алгоритмов анализа входного потока. Наиболее приемлемые результаты дает SnowballAnalyzer. В случае использования текстовых данных специфичной области можно переопределить список слов для фильтрации. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Теперь осталось строку запроса аналогичным образом перевести в массив слов, над которым проведен стемминг и фильтрация, и сформировать BSON-объект запроса к базе. Используем элементы запроса $elemMatch и $all. В общем виде запрос &quot;War and Peace&quot; будет выглядеть следующим образом:&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;javascript&quot; name=&quot;code&quot;&gt;{text: {$elemMatch: {tsearch: {$all: [&quot;war&quot;, &quot;peac&quot;]}}}
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Стоит учитывать, что данное решение не может предоставить того богатства функций, реализованных в полноценных поисковых движках. Речь идет о ранжировании результатов поиска, подсветки поисковых термов, поиск по атрибутам и прочих. Так что, если вам требуется что-то из перечисленного, думаю придется вникать во все прелести Lucene или Sphinx.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;P.S.&lt;/b&gt; Из данного поста можно сделать дополнительный вывод, что полностью избавиться от костылей не получится. Решив хронические проблемы реляционных СУБД, вы неминуемо столкнетесь с проблемами nosql.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;P.P.S.&lt;/b&gt; Если при разработке вы пользуетесь maven2, то все необходимые зависимости Lucene подключаются следующими блоками: &lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;lucene-core&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.0.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;

&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;lucene-snowball&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.0.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/6352417215681673574/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/6352417215681673574' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/6352417215681673574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/6352417215681673574'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/11/mongodb.html' title='Полнотекстовый поиск и mongodb.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-7854622964517910752</id><published>2010-11-02T13:51:00.000+03:00</published><updated>2010-11-02T13:51:00.408+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="информационная безопасность"/><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="хакинг"/><title type='text'>Безопасность Oracle глазами аудитора: нападение и защита.</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1he0zY8obLKRrhsXsL99Vg0vnETAQXTbtc08FpF-4_B0son3sRIm7gCPjPHEXSPreMHSllRYO1kDfUQy-GjdxzAy0vt6DFx16gxpssBN-7io5fUb-3-o9Ph5tbAVwAvBNZEvviw1dpay-/s1600/1001186904.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1he0zY8obLKRrhsXsL99Vg0vnETAQXTbtc08FpF-4_B0son3sRIm7gCPjPHEXSPreMHSllRYO1kDfUQy-GjdxzAy0vt6DFx16gxpssBN-7io5fUb-3-o9Ph5tbAVwAvBNZEvviw1dpay-/s320/1001186904.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В связи с отпуском и вливанием в рабочий процесс не мог уделить внимание блогу в должной степени. Исправиться хотел бы обратив ваше внимание на книгу &quot;Безопасность Oracle глазами аудитора: нападение и защита&quot;. Я уже говорил, что отечественный книжный рынок не балует любителей информационной безопасности большим разнообразием содержательных, а главное актуальных книг в данной области. В данном случае, данная книга является достойным представителем печатных изданий посвященных вопросам ИБ. Дополнительным стимулом к чтению данной книги является то, что ее автором является достаточно известный специалист в области защиты информации, один из основателей исследовательской лаборатории Digital Security Research Group - Александр Поляков, так же известный как &lt;a href=&quot;http://twitter.com/sh2kerr&quot;&gt;@sh2kerr&lt;/a&gt;. Поляков - один из немногих в России, кто проводит сертификацию компаний по стандарту PCI DSS.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Книга позиционируется как продолжатель традиций &lt;a href=&quot;http://www.ozon.ru/context/detail/id/89636/&quot;&gt;&quot;Атака на интернет&quot;&lt;/a&gt;. Именно с этой книги началось мое знакомство с миром компьютерной безопасности, так что не смог себе отказать в удовольствии ознакомиться с данным произведением.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Содержание книги посвящено такому важному вопросу как безопасность СУБД Oracle. Такая огромная и комплексная система как СУБД Oracle просто не может не содержать целую кладезь различного рода уязвимостей и слабостей, подвергающих угрозам не только хранимые данные, но и саму операционную систему, на которой Oracle функционирует.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Основной принцип построения книги - чтобы что-то хорошо защищать надо знать от чего защищать, а главное от кого, и как этот кто-то думает. Таким образом книга на 90% состоит из детального анализа сценариев и методов проникновения в Oracle, повышения привилегий, закрепления в системе и сокрытия признаков вторжения. Лишь 40-50 страниц посвящены вопросам аудита и корректной конфигурации сервера Oracle. Так что можно сказать, что книга больше подходит для интернет-злодеев, чем для администраторов.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В книге рассматривается комплексный последовательный подход к тестированию сервера Oracle на проникновение. Прочитав данную книгу можно получить представление о проблемах безопасности Oracle TNS Listener, раскрытия вспомогательной информации о базе, преодоление парольной защиты, PL/SQL инъекции, атаки на переполнение буфера, получения доступа к ОС через СУБД и другие атаки. В отдельную главу вынесена тема руткитов для Oracle.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Таким образом, данная книга может рассматриваться как начальное руководство для получения общего представления о вопросах безопасности Oracle. Ее можно рассматривать как отличную альтернативу &lt;a href=&quot;http://www.amazon.com/Oracle-Hackers-Handbook-Hacking-Defending/dp/0470080221/&quot;&gt;The Oracle Hacker&#39;s Handbook&lt;/a&gt;, к тому же имеется однозначное преимущество в виде языка на котором она написана.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;P.S. Пытался расшифровать QR-код на обложке книги - так ничего и не получилось. Интересно, содержит ли он какую либо реальную информацию.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/7854622964517910752/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/7854622964517910752' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7854622964517910752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7854622964517910752'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/11/oracle.html' title='Безопасность Oracle глазами аудитора: нападение и защита.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1he0zY8obLKRrhsXsL99Vg0vnETAQXTbtc08FpF-4_B0son3sRIm7gCPjPHEXSPreMHSllRYO1kDfUQy-GjdxzAy0vt6DFx16gxpssBN-7io5fUb-3-o9Ph5tbAVwAvBNZEvviw1dpay-/s72-c/1001186904.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-8860492264659285915</id><published>2010-08-12T16:50:00.001+04:00</published><updated>2010-08-12T16:54:49.915+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jasig cas"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="spring-security"/><category scheme="http://www.blogger.com/atom/ns#" term="sso"/><category scheme="http://www.blogger.com/atom/ns#" term="настройка"/><title type='text'>Сквозная аутенфикация при помощи JA-SIG CAS. Часть четвертая - реализация клиента для Spring Framework.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Продолжим цикл статей, посвященных настройке аутенфикации веб-приложений с использованием SSO JA-SIG CAS. В этой статье предлагается рассмотреть, каким образом настроить веб-приложение, в основе которого лежит Spring Framework 3-й версии.&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Spring Framework стал одним из стандартов де-факто в разработке корпоративных веб-приложений. Вышедшая не так давно, 3-я версия этого замечательного фреймворка позволила сделать процесс разработки еще более простым и увлекательным. Как можно будет убедиться, интеграция Spring Framework и JA-SIG CAS не займет много времени и не потребует особых усилий.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Скорее всего вам уже известно, что вопросами аутенфикации и разграничения доступа в Spring Framework отдано на откуп отдельной подсистеме - Spring Security. В третьей версии Spring интеграция с Security стала еще более плотной. На момент написания статьи актуальной является версия 3.0.3.RELEASE (репутация более молодых версий подпорчена неприятным &lt;a href=&quot;http://www.securityfocus.com/bid/40954/info&quot;&gt;security&lt;/a&gt; багом). Для того чтобы избежать проблем с зависимостями библиотек, настойчиво рекомендую использовать для java-разработки &lt;a href=&quot;http://maven.apache.org/&quot;&gt;apache maven&lt;/a&gt;. В этом случае, для подключения Spring Security и CAS, достаточно будет указать в разделе dependencies файла pom.xml следующие блоки:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.security&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-security-core&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${org.springframework.version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.security&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-security-config&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${org.springframework.version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.security&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-security-taglibs&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${org.springframework.version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.security&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-security-cas-client&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;${org.springframework.version}&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Не забудьте определить значение переменной ${org.springframework.version} в разделе properties.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Как можно видеть, от стандартной конфигурации зависимостей Spring Security, указанная выше, отличается наличием дополнительного модуля spring-security-cas-client. Данная библиотека содержит все классы, необходимые для интеграции Spring Security и JA-SIG CAS.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В работе SSO аутенфикации активно используется механизм сессий. Это приводит к необходимости внести определенные изменения в порядок обработки http-запросов. Нашей следующей целью становится файл web.xml. Рекомендуется добавить следующие определения к стандартной конфигурации:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;filter&amp;gt;
    &amp;lt;filter-name&amp;gt;CAS Single Sign Out Filter&amp;lt;/filter-name&amp;gt;
    &amp;lt;filter-class&amp;gt;org.jasig.cas.client.session.SingleSignOutFilter&amp;lt;/filter-class&amp;gt;
&amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;CAS Single Sign Out Filter&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-mapping&amp;gt;
&amp;lt;/filter-mapping&amp;gt;

&amp;lt;filter&amp;gt;
    &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;
    &amp;lt;filter-class&amp;gt;org.springframework.web.filter.DelegatingFilterProxy&amp;lt;/filter-class&amp;gt;
&amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-mapping&amp;gt;
&amp;lt;/filter-mapping&amp;gt;

&amp;lt;listener&amp;gt;
    &amp;lt;listener-class&amp;gt;org.jasig.cas.client.session.SingleSignOutHttpSessionListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;

&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;После редактирования данных файлов наступает самый объемный этап работы, а именно, формирование файла конфигурации Spring Security. Общепринятым названием для данного файла является securityContext.xml. Последние версии Spring Security опираются на собственное именное пространство конфигурации, а также на настройки по-умолчанию, что позволяет довольно быстро и в лаконичной форме получать работоспособную систему разграничения доступа и аутенфикации. Перепробовав несколько различных конфигураций, я пришел к следующему рабочему варианту:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xmlns:security=&quot;http://www.springframework.org/schema/security&quot;
       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.0.xsd&quot;&amp;gt;


    &amp;lt;security:http entry-point-ref=&quot;casEntryPoint&quot;&amp;gt;
        &amp;lt;security:intercept-url pattern=&quot;/admin&quot; access=&quot;ROLE_ADMIN&quot;/&amp;gt;
        &amp;lt;security:intercept-url pattern=&quot;/login&quot; access=&quot;ROLE_USER&quot;/&amp;gt;
        &amp;lt;security:intercept-url pattern=&quot;/**&quot; access=&quot;IS_AUTHENTICATED_ANONYMOUSLY&quot;/&amp;gt;
        &amp;lt;!--suppress SpringModelInspection --&amp;gt;
        &amp;lt;security:custom-filter position=&quot;CAS_FILTER&quot; ref=&quot;casFilter&quot;/&amp;gt;
        &amp;lt;security:logout invalidate-session=&quot;true&quot; logout-url=&quot;/logout&quot; logout-success-url=&quot;/&quot;/&amp;gt;
    &amp;lt;/security:http&amp;gt;

    &amp;lt;bean id=&quot;casEntryPoint&quot; class=&quot;org.springframework.security.cas.web.CasAuthenticationEntryPoint&quot;&amp;gt;
        &amp;lt;property name=&quot;loginUrl&quot; value=&quot;https://cas.server.net:8443/login&quot;/&amp;gt;
        &amp;lt;property name=&quot;serviceProperties&quot; ref=&quot;serviceProperties&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;serviceProperties&quot; class=&quot;org.springframework.security.cas.ServiceProperties&quot;&amp;gt;
        &amp;lt;property name=&quot;service&quot; value=&quot;http://my_spring_service/j_spring_cas_security_check&quot;/&amp;gt;
        &amp;lt;property name=&quot;sendRenew&quot; value=&quot;true&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;casFilter&quot; class=&quot;org.springframework.security.cas.web.CasAuthenticationFilter&quot;&amp;gt;
        &amp;lt;property name=&quot;authenticationManager&quot; ref=&quot;authenticationManager&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

    
    &amp;lt;security:authentication-manager alias=&quot;authenticationManager&quot;&amp;gt;
        &amp;lt;security:authentication-provider ref=&quot;casAuthenticationProvider&quot;/&amp;gt;
    &amp;lt;/security:authentication-manager&amp;gt;

    &amp;lt;bean id=&quot;casAuthenticationProvider&quot; class=&quot;org.springframework.security.cas.authentication.CasAuthenticationProvider&quot;&amp;gt;
        &amp;lt;property name=&quot;userDetailsService&quot; ref=&quot;userService&quot;/&amp;gt;
        &amp;lt;property name=&quot;serviceProperties&quot; ref=&quot;serviceProperties&quot;/&amp;gt;
        &amp;lt;property name=&quot;ticketValidator&quot;&amp;gt;
            &amp;lt;bean class=&quot;org.jasig.cas.client.validation.Cas20ServiceTicketValidator&quot;&amp;gt;
                &amp;lt;constructor-arg index=&quot;0&quot; value=&quot;https://cas.server.net:8443/&quot;/&amp;gt;
            &amp;lt;/bean&amp;gt;
        &amp;lt;/property&amp;gt;
        &amp;lt;property name=&quot;key&quot; value=&quot;an_id_for_this_auth_provider_only&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;userService&quot; class=&quot;class that implements spring userService&quot;&amp;gt;
    &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Головным блоком, определяющим настройки Spring Security, является &amp;lt;security:http&amp;gt;. Для данного блока мы указываем точку аутенфикации, перечисляем роли доступа для тех или иных частей ресурса,&amp;nbsp; добавляем cas-filter, и url выхода. Так в данном конфигурационном файле указано, что точка аутенфикации описывается компонентой casEntryPoint, раздел /admin требует от пользователя роли администратора, /login - роли пользователя, остальные части ресурса доступны для анонимных пользователей. Добавление casFilter необходимо для успешной обработки квитанции, получаемой от CAS сервера в случае успешной аутенфикации.&amp;nbsp; Если перейти по url &quot;/logout&quot;, то произойдет инвалидация сессии, и пользователь, став анонимным, перенаправляется в корень приложения.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Компонент casEntryPoint определяет url страницы аутенфикации CAS-сервера (https://cas.server.net:8443/login), а также, через компонент serviceProperties, определяет url, который в случае удачной аутенфикации получит квитанцию от CAS-сервера. Данный url прослушивает CAS filter и по-умолчанию равен /j_spring_cas_security_check. Если есть необходимость изменить значение по-умолчанию, это можно сделать, указав соответствующее значение параметру filterProcessUrl бина casFilter.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Основную роль в методе аутенфикации играет экземпляр провайдера аутенфикации. Фильтр CAS узнает о провайдере опосредованно, через ссылку на authenticationManager. Провайдеру необходимо указать способ проверки квитанции, полученной от CAS-сервера (Cas20ServiceTicketValidator), ключ идентификации, а также ссылку на экземпляр UserDetailsService. В моем случае, я использовал самописный UserDetailsService, который создавал экземпляр класса UserDetails с необходимыми ролями и списком переменных для приложения.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В конце,&amp;nbsp; можно запустить приложение и проверить работоспособность аутенфикации через сервер CAS. Хотелось бы напомнить, что для успешного общения с CAS-сервером по протоколу SSL необходимо доверительное отношение к сертификату сервера. В случае, если ваш сертификат самоподписной, не забудьте импортировать его в хранилище сертификатов java-виртуальной машины клиента. Как это делается, описано в &lt;a href=&quot;http://freekoder.blogspot.com/2010/07/ja-sig-cas-ssl-tomcat-6.html&quot;&gt;предыдущей статье&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Данная конфигурация проста и незатейлива,&amp;nbsp; рассчитана на ситуацию, когда у приложения есть анонимные пользователи с общим доступом, и залогиненные пользователи (например, для предоставления дополнительных функций). Разграничение на основе списков доступа, и более сложные механизмы не рассматривались, но добавление данных возможностей в представленную конфигурацию не должно сильно отличаться от других ситуаций использования Spring Security.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Предыдущие статьи про настройку JA-SIG CAS:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://freekoder.blogspot.com/2010/06/ja-sig-cas.html&quot;&gt;Начальная сборка CAS-сервера&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://freekoder.blogspot.com/2010/07/ja-sig-cas.html&quot;&gt;Собственный обработчик аутенфикации CAS-сервера&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://freekoder.blogspot.com/2010/07/ja-sig-cas-ssl-tomcat-6.html&quot;&gt;Настройка SSL в&amp;nbsp; Apache Tomcat 6&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;&lt;ol&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/8860492264659285915/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/8860492264659285915' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8860492264659285915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8860492264659285915'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/08/ja-sig-cas-spring-framework.html' title='Сквозная аутенфикация при помощи JA-SIG CAS. Часть четвертая - реализация клиента для Spring Framework.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-8439432512891263581</id><published>2010-07-30T13:06:00.000+04:00</published><updated>2010-07-30T13:06:13.250+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google analytics"/><category scheme="http://www.blogger.com/atom/ns#" term="аналитика"/><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="обзор"/><title type='text'>Google Analytics. Профессиональный анализ посещаемости веб-сайтов</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaB2XOgIs3Xa1G2aYiGaV3ob30GLZQyraHsvMCo3q8GLKHZN9YwOQEB55__7HXOdKAwsLWTiDriMiKZibvcBJDMs__ZqsbGj6y0MlFMoeRPUNgGa6FsGiCICMcqUkMIKD8TGN4GcZSvy-B/s1600/1001193457.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaB2XOgIs3Xa1G2aYiGaV3ob30GLZQyraHsvMCo3q8GLKHZN9YwOQEB55__7HXOdKAwsLWTiDriMiKZibvcBJDMs__ZqsbGj6y0MlFMoeRPUNgGa6FsGiCICMcqUkMIKD8TGN4GcZSvy-B/s320/1001193457.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Брайан Клифтон - глава отдела веб-аналитики Google по Европе, Ближнему Востоку и Африке, делится в своей книге секретами оценки успешности вашего веб-сайта посредством наиболее популярного инструмента - Google Analytics. Новый пользователь сталкивается с большим количеством диаграм, цифр, настроек, терминов. Разобраться в большинстве аспектов использования Google Analytics поможет данная книга. 380 страниц покрывают широчайший спектр вопросов начиная от механизма сбора статистики до принципов оптимизации страниц.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Читатель знакомится с понятиями конверсии, отказов, целей, профилей, компаний. Прочтение данной книги может помочь в определении тех типов отчетов, которые наиболее интересны будут вам, как владельцу сайта. Отдельное внимание уделяется вопросам интерпретации поведения пользователей в денежном эквиваленте, в том числе и для некоммерческих сайтов. Рассмотрена интеграция Google Analytics с такими продуктами как Google AdWords и WebSite Optimizer. Каждая глава посвящена решению какой либо конкретной проблемы - описанию того или иного отчета, настройке определенного фильтра, определению цели. Конкретика каждой главы подкреплена примерами кода на javascript, снимками страниц Google Analytics, ситуациями из жизни реальных компаний.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Мне встречались мнения, что данная книга не содержит ничего такого, что не содержалось бы в официальной справке по Google Analytics. Наверно, можно было бы согласиться с данным утверждением, но лишь отчасти.&amp;nbsp; Действительно, технически-подкованный человек без труда найдет решения своих проблем, ознакомившись с терминологией и типами отчетов в официальной справке. Но вот чего он не сможет найти, так это рекомендации и указания, какие типы отчетов наиболее были бы полезны в том или ином случае, или вызвали бы интерес у тех или иных людей, советы по настройке фильтров и профилей сайта, подходы к интерпретации полученных данных и их анализа. Полагаю, данную информацию также можно найти в открытых источниках, но книга позволит вам сэкономить ваше время. Так что, если на работе вам внезапно свалился бонус в виде подготовки отчетов об эффективности веб-ресурса компании, то данная книга придется вам как никогда кстати.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Книгу можно было бы рекомендовать всем,&amp;nbsp; кого интересуют вопросы эффективности его сайта, неважно блог это или промо-сайт. Особенно посоветовал бы данную книгу тем, кто задумывается над открытием собственного бизнеса в интернете. Получить понимание об объеме работы, которую необходимо будет провести в области регулярной аналитики, никогда не бывает лишним. Это поможет рассчитать собственные силы или навести на мысль о целесообразности привлечения стороннего специалиста.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;P.S.&amp;nbsp; &lt;/b&gt;С книгой идет подарочный сертификат от Google AdWords. К сожалению срок годности его закончился в 2009 году.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/8439432512891263581/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/8439432512891263581' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8439432512891263581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8439432512891263581'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/07/google-analytics.html' title='Google Analytics. Профессиональный анализ посещаемости веб-сайтов'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaB2XOgIs3Xa1G2aYiGaV3ob30GLZQyraHsvMCo3q8GLKHZN9YwOQEB55__7HXOdKAwsLWTiDriMiKZibvcBJDMs__ZqsbGj6y0MlFMoeRPUNgGa6FsGiCICMcqUkMIKD8TGN4GcZSvy-B/s72-c/1001193457.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-5000652853880719289</id><published>2010-07-22T14:59:00.001+04:00</published><updated>2010-07-22T18:06:26.154+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jasig cas"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="sso"/><category scheme="http://www.blogger.com/atom/ns#" term="администрирование"/><title type='text'>Сквозная аутенфикация при помощи JA-SIG CAS. Часть третья - настройка SSL в Tomcat 6.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;В предыдущих частях (&lt;a href=&quot;http://freekoder.blogspot.com/2010/06/ja-sig-cas.html&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://freekoder.blogspot.com/2010/07/ja-sig-cas.html&quot;&gt;2&lt;/a&gt;), посвященных системе сквозной аутенфикации, описывались начальные шаги по развертыванию системы сборки CAS-сервера и реализации обработчика аутенфикации. На данном этапе у нас должна быть сборка CAS-сервера, готовая к развертыванию на рабочем сервере. Это не представляет труда за одним небольшим нюансом. Протокол CAS требует работы через SSL. Таким образом, появляется необходимость настройки SSL для веб-контейнера. Наиболее популярным веб-контейнером является Apache Tomcat. На момент написания данной статьи, актуальной являлась версия 6.0.28. Данная статья покажет один из способов настройки поддержки SSL для Tomcat.&lt;/div&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Настройка tomcat сводится фактически к 3 основным действиям:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Генерация сертификата;&lt;/li&gt;
&lt;li&gt;Включение SSL коннектора tomcat;&lt;/li&gt;
&lt;li&gt;Импорт сертификата в клиентские системы.&lt;/li&gt;
&lt;/ol&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Итак, попорядку.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Прежде всего необходимо сгенерировать самоподписанный (self-signed) SSL сертификат. Сделать это можно при помощи утилиты keytool, входящей в состав sun-jdk.&lt;/div&gt;&lt;pre class=&quot;bash&quot; name=&quot;code&quot;&gt;#${JAVA_HOME}/bin/keytool -genkey -alias cas.example.com \
-keyalg RSA -keystore /tmp/.keystore
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Утилита потребует от Вас заполнения ряда атрибутов для сертификата, а также попросит определить пароль для файла-хранилища сертификата. В качестве параметра alias для утилиты, я использовал доменное имя, где будет располагаться CAS-сервер. Результатом работы утилиты будет файл-хранилище сертификата (/tmp/.keystore). Данный файл нам пригодится на втором этапе настройки SSL для tomcat. Его необходимо перенести в общедоступное место, например, в /etc/tomcat-cert. Я разместил .keystore в ${CATALINA_HOME}/conf.&amp;nbsp; Но тут ограничений никаких нет.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Далее наша работа будет сосредоточена вокруг редактирования файла конфигурации сервера tomcat - server.xml (${CATALINA_HOME}/conf/server.xml).&amp;nbsp; Все, что нам необходимо, это всего лишь раскоментировать ssl-connector и объяснить ему где находится хранилище сертификата.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Необходимо найти строку, содержащу: &lt;/div&gt;&lt;pre&gt;&amp;lt;Connector port=&quot;8443&quot;...&amp;gt;&lt;/pre&gt;раскоментировать данный блок и привести его к следующему виду:&lt;br /&gt;
&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;Connector clientAuth=&quot;false&quot; keystoreFile=&quot;/opt/tomcat/conf/.keystore&quot;
              keystorePass=&quot;password&quot; maxThreads=&quot;150&quot; 
              port=&quot;8443&quot; scheme=&quot;https&quot; secure=&quot;true&quot; 
              sslEnabled=&quot;true&quot; sslProtocol=&quot;TLS&quot;/&amp;gt;
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Данный блок дополнен параметрами keystoreFile и keystorePass, определяющих наше хранилище.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Данных настроек достаточно, для того, чтобы после перезапуска tomcat, довольствоваться защищенным соединением через порт 8443.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Я предпочитаю конфигурацию, когда каждое веб-приложение работает в рамках собственного поддомена. Для этого можно создать в ${CATALINA_HOME} директорию appBases, и для каждого веб-приложения в данной директории иметь поддиректорию. Так war-архив CAS-сервера, можно разместить в директории ${CATALINA_HOME}/appBases/cas/ROOT.war.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В server.xml необходимо будет добавить запись для данного приложения:&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&amp;lt;Host name=&quot;cas.example.com&quot; appBase=&quot;appBases/cas&quot; 
         unpackWARs=&quot;true&quot; autoDeploy=&quot;true&quot; 
         xmlValidation=&quot;false&quot; xmlNamespaceAware=&quot;false&quot;&amp;gt;
    &amp;lt;Context path=&quot;/ROOT&quot; reloadable=&quot;true&quot;&amp;gt;
&amp;lt;/Host&amp;gt;
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;После рестарта tomcat (при условии корректной настройки dns) можно обратиться к cas.example.com, как https://cas.example.com:8443 и убедиться в работоспособности сервера аутенфикации.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Итак, мы получаем полностью работоспособный сервер сквозной аутенфикации. Следующим крупным шагом станет интеграция системы CAS в конечные клиенты. Правда и тут не обходится без нюансов. Так как мы используем самоподписанный сертификат, для того, чтобы предотвратить возникновение исключений со стороны нашего java-софта при работе с CAS, необходимо импортировать сертификат в jre-клиентов. Импорт сертификата можно произвести все той же утилитой keytool. Одним из допустимых форматов импорта сертификата является DER.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Для его получения достаточно воспользоваться firefox. Перейти на защищенную страницу (https://cas.example.com:8443),&amp;nbsp; открыть информацию о странице, вкладку защита, просмотреть сертификат, подробности, экспортировать. Далее остается выбрать &quot;сертификат X.509 в формате DER&quot;, и сохранить. В моем случае получился файл cas.example.com.der.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Импорт сертификата в jre производится магическим заклинанием:&lt;/div&gt;&lt;pre class=&quot;bash&quot; name=&quot;code&quot;&gt;#${JAVA_HOME}/bin/keytool -import -keystore \
 ${JRE_HOME}/lib/security/cacerts -file cas.example.com.der -alias cas.example.com
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Магию следует применять на каждом хосте, где планируется использование клиента CAS-сервера.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Сдедующая часть будет посвящена именно созданию клиента в среде spring framework.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/5000652853880719289/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/5000652853880719289' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5000652853880719289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5000652853880719289'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/07/ja-sig-cas-ssl-tomcat-6.html' title='Сквозная аутенфикация при помощи JA-SIG CAS. Часть третья - настройка SSL в Tomcat 6.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-7642583773376931838</id><published>2010-07-09T09:50:00.001+04:00</published><updated>2010-07-22T18:07:02.527+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jasig cas"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="sso"/><category scheme="http://www.blogger.com/atom/ns#" term="разработка"/><title type='text'>Сквозная аутенфикация при помощи JA-SIG CAS. Часть вторая - реализуем обработчик аутенфикации.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;В &lt;a href=&quot;http://freekoder.blogspot.com/2010/06/ja-sig-cas.html&quot;&gt;первой части статьи&lt;/a&gt; было описано, каким образом развернуть и настроить систему для сборки CAS-сервера. В реализации по-умолчанию, CAS сервер допускает только тех пользователей, чьи логин и пароль совпадают. Во второй статье хотелось бы остановиться на&amp;nbsp; вопросе создания собственного обработчика аутенфикации. В качестве примера показана привязка аутенфикационных данных учетной записи пользователя к записи в базе данных почтового сервера postfix.&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;CAS поддерживает достаточно большое количество различных схем аутенфикации, среди которых и LDAP, и OpenId, Radius, X.509. В моем случае, учетные записи пользователей хранились в базе данных почтового сервера корпоративной почты на базе postfix. Такой подход позволяет при создании почтового ящика, например для нового пользователя, автоматически предоставлять ему доступ к существующим сервисам. Postfix позволяет хранить информацию о пользователях в базе данных, в частности при помощи СУБД PostgreSQL.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Напомню, что центральным модулем, на которое будет направлено наше внимание, является cas-server-webapp. Именно в нем будут сосредоточены наши изменения.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Открываем в IDE данный модуль. Прежде всего необходимо определиться с зависимостями&amp;nbsp; для cas-server-webapp. Так как в нашем случае аутенфикационные данные будут запрашиваться из базы данных, то нам потребуется указать зависимости от модуля cas-server-support-jdbc, какой-либо библиотеки, реализующей DataSource, и драйвера нашей СУБД. В моем случае я использовал commons-dbcp и postgresql.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В итоге в раздел dependencies файла pom.xml модуля cas-server-webapp&amp;nbsp; были добавлены следующие строки:&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;dependency&gt;
  &lt;groupid&gt;org.jasig.cas&lt;/groupid&gt;
  &lt;artifactid&gt;cas-server-support-jdbc&lt;/artifactid&gt;
  &lt;version&gt;3.4.2&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupid&gt;postgresql&lt;/groupid&gt;
  &lt;artifactid&gt;postgresql&lt;/artifactid&gt;
  &lt;version&gt;8.4-701.jdbc4&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupid&gt;commons-dbcp&lt;/groupid&gt;
  &lt;artifactid&gt;commons-dbcp&lt;/artifactid&gt;
  &lt;version&gt;1.4&lt;/version&gt;
&lt;/dependency&gt;
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Перейдем к определению обработчика аутенфикации. Основные настройки процесса аутенфикации находятся в файле cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml. Данный файл является файлом контекста фреймворка spring (cas-server-webapp реализован с использованием spring framework 3). Ключевым объектом в данном файле является authenticationManager, в рамках которого определен список обработчиков аутенфикации. Если обратить внимание, то мы увидим, что в качестве обработчика аутенфикации используется &lt;a href=&quot;http://developer.jasig.org/projects/cas/cas-server-core/cas-server/cas-server-core/apidocs/org/jasig/cas/authentication/handler/support/SimpleTestUsernamePasswordAuthenticationHandler.html&quot;&gt;SimpleTextUsernamePasswordAuthenticationHandler&lt;/a&gt; (это тот, который пропускает пользователей с паролем совпадающим с логином). Вот его то и предстоит заменить на нужную реализацию.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Обобщение процесса обработки аутенфикационных данных представлено в виде интерфейса &lt;a href=&quot;http://developer.jasig.org/projects/cas/cas-server-core/cas-server/cas-server-core/apidocs/org/jasig/cas/authentication/handler/AuthenticationHandler.html&quot;&gt;org.jasig.authentication.handler.AuthenticationHandler&lt;/a&gt;. Данный интерфейс лежит на самом верху глубокой иерархии абстрактных и конкретных классов, реализующих различные стратегии аутенфикации. Модуль cas-server-support-jdbc содержит набор готовых классов, поддерживающих аутенфикацию с использованием баз данных. В большинстве случаев подойдет &lt;a href=&quot;http://developer.jasig.org/projects/cas/cas-server-support-jdbc/cas-server/cas-server-support-jdbc/apidocs/org/jasig/cas/adaptors/jdbc/QueryDatabaseAuthenticationHandler.html&quot;&gt;org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler&lt;/a&gt;. Для настройки данного обработчика надо передать ссылку на DataSource базы данных и шаблон sql-запроса для получения пароля по имени пользователя.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Вот простой пример, настройки схемы аутенфикации с использованием данного класса. Первое - в файл deployerConfigContext.xml довляем bean описывающий DataSource:&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;bean class=&quot;org.apache.commons.dbcp.BasicDataSource&quot; id=&quot;dataSource&quot;&gt;
  &lt;property name=&quot;driverClassName&quot; value=&quot;org.postgresql.Driver&quot;&gt;&lt;/property&gt;
  &lt;property name=&quot;url&quot; value=&quot;jdbc:postgresql://db_address/db_name&quot;&gt;&lt;/property&gt;
  &lt;property name=&quot;username&quot; value=&quot;username&quot;&gt;&lt;/property&gt;
  &lt;property name=&quot;password&quot; value=&quot;password&quot;&gt;&lt;/property&gt;
&lt;/bean&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Второй шаг - замена класса с SimpleTestUsernamePasswordAuthenticationHandler на QueryDatabaseAuthenticationHandler с указанием его параметров. Это выглядит следующим образом:&lt;/div&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;property name=&quot;authenticationHandlers&quot;&gt;
  &lt;list&gt;
    &lt;bean class=&quot;org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler&quot; p:httpclient-ref=&quot;httpClient&quot;&gt;&lt;/bean&gt;
    
    
    &lt;bean class=&quot;org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler&quot;&gt;
      &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;&gt;&lt;/property&gt;
      &lt;property name=&quot;sql&quot; value=&quot;select password from users where username = ? limit 1&quot;&gt;&lt;/property&gt;
    &lt;/bean&gt;
  &lt;/list&gt;
&lt;/property&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;В том случае, если в вашей базе данных пароли пользователей хранятся в закрытом виде, то необходимо указать для QueryDatabaseAuthenticationHandler дополнительное свойство - ссылку на класс passwordEncoder (интерфейс PasswordEncoder), в котором определяется механизм закрытия пароля. К сожалению, логика класса QueryDatabaseAuthenticationHandler не подразумевает возможности использования паролей, закрытых при помощи алгоритма хеширования с маркером (salt).&amp;nbsp; А в моем случае&amp;nbsp; сервер postfix использовал именно такой метод закрытия паролей. Таким образом, без собственной реализации&amp;nbsp; AuthenticationHanlder-а было не обойтись.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Создание собственного обработчика аутенфикации не представляет особой сложности. В моем случае в первую очередь необходимо было установить, какой алгоритм использовался для закрытия паролей. При помощи openssl удалось установить, что postfix использует стандартный юниксовый алгоритм crypt на базе md5. На &lt;a href=&quot;http://koders.com/&quot;&gt;koders.com&lt;/a&gt; в течении 2 минут можно найти реализацию данного алгоритма. Далее необходимо реализовать интерфейс AuthenticationHandler. К счастью, модуль cas-server-support-jdbc содержит абстрактный класс &lt;a href=&quot;http://developer.jasig.org/projects/cas/cas-server-support-jdbc/cas-server/cas-server-support-jdbc/apidocs/org/jasig/cas/adaptors/jdbc/AbstractJdbcUsernamePasswordAuthenticationHandler.html&quot;&gt;AbstractJdbcUsernamePasswordAuthenticationHandler&lt;/a&gt;. Все что нам необходимо сделать, это доопределить абстрактный метод authenticateUsernamePasswordInternal. Вот моя реализация:&lt;/div&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package insane.code.monkeys.cas.adaptors;

import ...

public class PostfixDatabaseAuthenticationHnalder extends AbstractJdbcUsernamePasswordAuthenticationHandler {
  
  private static final String POSTFIX_MAILBOX_QUERY = &quot;select password from mailbox where username = ?&quot;;
  
  protected boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) throws AuthenticationException {
    final String username = getPrincipalNameTransformer().transform(credentials.getUsername());
    final String password = credentials.getPassword();

    try {
      final String dbPassword = getJdbcTemplate().queryForObject(POSTFIX_MAILBOX_QUERY, String.class, username);
      if ( dbPassword.length() != 34 ) return false;
      String saltPart = dbPassword.substring(3,11);
      String hashedPassword = MD5Crypt(password, saltPart);
      return hashedPassword.equals(dbPassword);
    } catch(IncorrectResultSizeDataAccessException e) {
      // это означает, что пользователя в базе нет
      return false;
    }
  }
}
&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Как мы можем видеть, абстрактный класс предоставляет все необходимое для комфортной работы, в частности jdbcTemplate от spring-framework. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Данный класс можно добавить непосредственно в директорию исходников модуля cas-server-webapp/src/main/java/.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Остается только убедиться в работоспособности нашего аутенфикационного обработчика, запустив jetty, открыв страницу аутенфикации и введя корректный логин и пароль. Не забудьте проверить на ложном наборе логина и пароля, дабы избежать сюрпризов в дальнейшем.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В случае возникновения ошибок в аутенфикации, всегда можно дополнить аутенфикационный обработчик трассировочными сообщениями.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Не составляет труда понять, что реализация других механизмов аутенфикации проходит по аналогичному сценарию. В модуле cas-server-webapp прописывается соответствующая зависимость cas-server-support-, и в файле deployerConfigContext.xml настраивается authenticationManager путем указания того или иного authenticationHandler (идут в поставке каждого модуля). Так же не должно составить труда реализовать при необходимости собственный модуль аутенфикации, например, получающий аутенфикационные данные из файла.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/7642583773376931838/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/7642583773376931838' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7642583773376931838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7642583773376931838'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/07/ja-sig-cas.html' title='Сквозная аутенфикация при помощи JA-SIG CAS. Часть вторая - реализуем обработчик аутенфикации.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-2014938250619971204</id><published>2010-07-02T14:40:00.000+04:00</published><updated>2010-07-02T14:40:24.284+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><category scheme="http://www.blogger.com/atom/ns#" term="переговоры"/><category scheme="http://www.blogger.com/atom/ns#" term="психология"/><title type='text'>Договориться можно обо всем! Как добиваться максимума в любых переговорах</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiiryhXtO82JMSS7sCC1KYGTCqykzlbVfn0kl2_2WGCvWH7OwY9DxflxehO6OLw_XM6BqIQAaU8jnx1PNiwaBkgP43Cyb6bzDs53vmtnplqTU98nTUAbPnQ3qbfMclXVEu4LQ-TAytRowd/s1600/dogovor.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiiryhXtO82JMSS7sCC1KYGTCqykzlbVfn0kl2_2WGCvWH7OwY9DxflxehO6OLw_XM6BqIQAaU8jnx1PNiwaBkgP43Cyb6bzDs53vmtnplqTU98nTUAbPnQ3qbfMclXVEu4LQ-TAytRowd/s320/dogovor.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Данная книга никакого отношения к IT-тематике не имеет. В ней раскрываются принципы переговорного процесса. Но тем не менее хотелось бы на ней остановиться по двум причинам. Во-первых, умение вести переговоры еще никому не мешало. Как говорится, сегодня вы обычный программист, пишите код для дяди, а завтра вам возможно уже придется вести разговоры о продаже вашего стартапа. Во-вторых, я особенно трепетно отношусь к книгам, которые разрушают стандартное и сложившееся восприятие окружающего мира. А данная книга, в моем случае, его разрушила. Эта книга убедила меня, что все мои наивные представления о формах и способах ведения переговоров настолько несостоятельны, что можно только удивляться как крепко в нас врастают ошибочные стереотипы.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;И да, там есть модель. А мы, люди технического ума, любим модели. Пускай даже и простые. Гевин Кеннеди разделяет всех переговорщиков по манере ведения переговоров на 4 категории: робких овец, упертых ослов, хитрых лисов, мудрых сов. И уже с первых строк читателю предоставляется возможность при помощи тестов определить, в какую категорию он попадает. Думаю новички переговорного дела, к коим я отношусь,&amp;nbsp; попадут в касту малопривлекательных травоядных животных. И вот тут начинает свою роль играть чувство обиды за себя любимого. И это заставляет вгрызаться в остальные главы книги, все дальше и дальше. 26 глав, из которых состоит книга, построены по простому принципу - сначала тест из 3-4 вопросов, само содержание главы, раскрывающего стратегические подходы, тактические приемы и различного рода психологические ловушки, и в конце главы ответы на вопросы, с комментариями. И с каждой главой читателю дают возможность работать над собой, меняться. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Книга преисполнена азартом. Вот вы уже на 15% лис, через пару глав в вас наконец-то появляется немного совы, к концу книги вы начинаете чувствовать себя не так ущербно как в начале.&amp;nbsp; Вы начинаете понимать основные принципы переговорного процесса и стараетесь не вспоминать те стереотипы, которыми руководствовались ранее.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Полезность книги оценить достаточно просто. Я думаю она сполна окупится сэкономленными на переговорах средствами, независимо от того, кто будет ваши оппонентом: жена, гаишник или же крупный клиент вашей компании.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;P.S&lt;/b&gt;. Есть аудио-вариант данной книги, так что, если вы заядлый автолюбитель, то данное произведение поможет с пользой скоротать время в бесконечных пробках.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/2014938250619971204/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/2014938250619971204' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/2014938250619971204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/2014938250619971204'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/07/blog-post.html' title='Договориться можно обо всем! Как добиваться максимума в любых переговорах'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiiryhXtO82JMSS7sCC1KYGTCqykzlbVfn0kl2_2WGCvWH7OwY9DxflxehO6OLw_XM6BqIQAaU8jnx1PNiwaBkgP43Cyb6bzDs53vmtnplqTU98nTUAbPnQ3qbfMclXVEu4LQ-TAytRowd/s72-c/dogovor.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-5062010082448169208</id><published>2010-06-27T19:21:00.000+04:00</published><updated>2010-06-27T19:21:43.627+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="интерфейс"/><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="мнения"/><title type='text'>Интерфейс. Новые направления в проектировании компьютерных систем</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw37fxXYlFHgDE3gn6OlWNgLodz_BtA55c55Fnib7LIFYoCM1ilAZH0S987Sq73r3YQ9XFdfCasBPd8Wviu3R53feYgMfFkYM7qyTCi1SFsjFcyEoBFbIyHzo3xLu7GGzQl7vskxYud66S/s1600/interface.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw37fxXYlFHgDE3gn6OlWNgLodz_BtA55c55Fnib7LIFYoCM1ilAZH0S987Sq73r3YQ9XFdfCasBPd8Wviu3R53feYgMfFkYM7qyTCi1SFsjFcyEoBFbIyHzo3xLu7GGzQl7vskxYud66S/s320/interface.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Для профессии программиста можно придумать достаточно много ассоциаций. Одной из популярных является отождествление программиста с переводчиком. По сути дела задача программиста заключается в переводе какой-то жизненной проблемы или процесса на магический язык, понятный всем этим железкам, несущих гордое название вычислительная техника. Результаты программ так же требуется донести до конечного пользователя, причем в приемлемом и понятном для него виде (ну только, если вы не пишете программу для другого программиста). Ни для кого не секрет, что точка соприкосновения пользователя с программой называется интерфейсом. Если программу сравнивать с айсбергом, то интерфейс - это его верхушка. Именно этой верхушке посвящена книга Джефа Раскина, всемирно признанного специалиста по компьютерным интерфейсам.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;&quot;&gt;Интерфейс, как одежка программы, по которой встречают, является одной из наиболее значимой части программы. И вот тут, возникают проблемы. Причина как мне кажется, заключается в сложной формализации такого понимания как интерфейс. Программисты с их любовью к формальным подходам, качественным и количественным оценкам, не находят привычных метрик в задачах создания интерфейсов. Типичным в данной ситуации является копирование существующих шаблонов, что не всегда приводит к положительным результатам. Мне кажется, книга Джефа Раскина &quot;Интерфейс&quot;, достаточно удачный способ внести в данную область долю формализма. Ценность данной книги заключается в том, что она не является набором удачных шаблонов в области дизайна интерфейсов, а раскрывает основополагающие принципы построения интерфейсов. Читателя знакомят с такими понятиями как режим и квазирежим, локус внимания, монотонность, видимость. Любителям формальных метрик предложат модель скорости печати GOMS, законы Фитса и Хика. Дабы теория не выглядела голословной, книга содержит простую задачку, имеющую различные реализации интерфейсов. Каждый интерфейс оценивается согласно представленным методам, читателю предлагается на их основе улучшить интерфейс задачи.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;&quot;&gt;Стоит отметить, что автор книги также является создателем знаменитого Apple Macintosh. Если вами овладеет желание познать в рамках какой религии создавался интерфейс Mac Os, почему в данной ОС меню приложений находится у верхней границы экрана, почему iphone не нужны файловые менеджеры, а мышка от Apple имеет только одну кнопку, то вам достаточно будет прочитать данную книгу.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;&quot;&gt;Также данная книга сможет быть вам интересна в случаях, если вы:&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;не можете без эмоций с около-научной точки зрения объяснить почему CapsLock - зло;&lt;/li&gt;
&lt;li&gt;не понимаете причину, по которой пользователям приходится раз за разом искать кнопку вызова функции в вашей программе;&lt;/li&gt;
&lt;li&gt;неудовлетворенны интерфейсами программ, которые вы создаете;&lt;/li&gt;
&lt;li&gt;хотите хоть одним глазком заглянуть в возможное будущее интерфейсов и подчерпнуть оттуда новых идей ;&lt;/li&gt;
&lt;li&gt;освободиться от навязанных шаблонов и вникнуть в суть формальных способов построения интерфейсов.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/5062010082448169208/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/5062010082448169208' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5062010082448169208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5062010082448169208'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/06/blog-post_27.html' title='Интерфейс. Новые направления в проектировании компьютерных систем'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw37fxXYlFHgDE3gn6OlWNgLodz_BtA55c55Fnib7LIFYoCM1ilAZH0S987Sq73r3YQ9XFdfCasBPd8Wviu3R53feYgMfFkYM7qyTCi1SFsjFcyEoBFbIyHzo3xLu7GGzQl7vskxYud66S/s72-c/interface.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-7527537011680910259</id><published>2010-06-03T21:53:00.031+04:00</published><updated>2010-06-08T17:12:05.350+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jasig cas"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="разработка"/><title type='text'>Сквозная аутенфикация при помощи JA-SIG CAS. Часть первая - сборка</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Небольшое руководство по внедрению в инфраструктуру информационной среды предприятия сервера кроссдоменной сквозной аутенфикации на базе &lt;a href=&quot;http://www.jasig.org/cas&quot;&gt;JA-SIG CAS&lt;/a&gt;.&lt;br /&gt;В моем конкретном случае, решение данной задачи заняло несколько больше времени, чем я расчитывал. Буду рад, если данная статья поможет более четко представить объем необходимых работ, а возможно сэкономит несколько часов поиска в интернет разрозненной информации по этапам настройки CAS сервера.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Для простоты, я бы выделил следующие основные подзадачи:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Сборка  сервиса JA-SIG CAS и тестирование на работоспособность;&lt;/li&gt;&lt;li&gt;Реализация требуемого обработчика аутенфикации JA-SIG CAS;&lt;/li&gt;&lt;li&gt;Настройка Tomcat 6 и развертывание CAS web-приложения;&lt;/li&gt;&lt;li&gt;Реализация  клиента для конечного сервиса;&lt;/li&gt;&lt;li&gt;Добавление плюшек и бантиков.&lt;/li&gt;&lt;/ol&gt;Каждый пункт думаю раскрыть в отдельной статье. Данная статья, в частности, посвящена первому этапу, а именно - подготовке среды для создания собственного сервера CAS.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;JA-SIG CAS Server реализован на языке java и в качестве инфраструктуры сборки использует Maven2. Так что, знания данных инструментов вам будет необходимо в ходе работы.&lt;br /&gt;&lt;br /&gt;Прежде всего необходимо скачать дистрибуцию самого cas севрера. Сделать это можно с официального сайта. На момент написания статьи на &lt;a href=&quot;http://www.jasig.org/cas/download&quot;&gt;странице скачивания&lt;/a&gt; последняя доступная версия CAS сервера имела номер 3.4.2. Распространяется как обычный zip или tar.gz архив.&lt;br /&gt;После распаковки архива, вы должны получить директорию cas-server-3.4.2, которая является корнем maven2 проекта. Данный проект состоит из нескольких модулей. Наше внимание в основном будет сосредоточено на модуле cas-server-webapp.&lt;br /&gt;&lt;br /&gt;Я бы настоятельно рекомендовал импортировать корневую директорию в качестве проекта вашей любимой IDE. Насколько мне известно, все они успешно работают с проектами maven2. Так же не лишним будет натянуть страховочную сеть в виде системы контроля версий, особенно если вы любите экспериментировать.&lt;br /&gt;В зависимостях проекта прописаны 2 дополнительных maven репозитория, а именно JA-SIG Maven Repository(http://developer.ja-sig.org/maven2) и JBoss  Repository(http://repository.jboss.com/maven2). Так что, если вы используете внутренний кэширующий maven репозиторий, не забудьте добавить данные репозитории в списки индексируемых. Мой выбор в данном плане &lt;a href=&quot;http://nexus.sonatype.org/&quot;&gt;sonatype nexus&lt;/a&gt;. Именно на этом шаге меня подвела моя забывчивость - в случае с nexus недостаточно просто добавить репозитории, их надо прописать как публично доступные. На выяснение причин, по которым сборка не может выгрузить зависимости я потратил около часа. Так что, будьте осторожны.&lt;br /&gt;&lt;br /&gt;Архив дистрибуции уже идет с собранными модулями, поэтому не вижу особой необходимости делать пересборку проекта с корня. Предлагаю обратить внимание непосредственно на cas-server-webapp. Для того, чтобы убедиться что проект может быть собран, необходимо перейти в директорию cas-server-3.4.2/cas-server-webapp и набрать в консоли &lt;span style=&quot;font-weight: bold;&quot;&gt;mvn package&lt;/span&gt;. Еще лучше провести данную операцию из любимой IDE. Если сборка прошла успешно, значит проблемы с видимостью maven репозиториев и наличия зависимостей на них нас миновали.&lt;br /&gt;&lt;br /&gt;Следующим шагом является непосредственное тестирование веб-приложения cas. Для простоты тестирования веб-приложений могу рекомендовать использовать &lt;span style=&quot;font-weight: bold;&quot;&gt;maven-jetty-plugin&lt;/span&gt;. Легковесный web-контейнер разворачивается в считанные секунды и идеально подходит для вопросов тестирования. Для подключения плагина необходимо отредактировать cas-server-3.4.2/cas-server-webapp/pom.xml в секции build. В моем случае секция biuld выглядела следующим образом:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;&lt;build&gt;&lt;br /&gt;&lt;plugins&gt;&lt;br /&gt;&lt;plugin&gt;&lt;br /&gt;&lt;groupid&gt;org.mortbay.jetty&lt;/groupid&gt;&lt;br /&gt;&lt;artifactid&gt;maven-jetty-plugin&lt;/artifactid&gt;&lt;br /&gt;&lt;version&gt;6.1.24&lt;/version&gt;&lt;br /&gt;&lt;configuration&gt;&lt;br /&gt;  &lt;scanIntervalSeconds&gt;10&lt;/scanIntervalSeconds&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;/plugin&gt;&lt;br /&gt;&lt;plugin&gt;&lt;br /&gt;&lt;groupid&gt;org.apache.maven.plugins&lt;/groupid&gt;&lt;br /&gt;&lt;artifactid&gt;maven-war-plugin&lt;/artifactid&gt;&lt;br /&gt;&lt;configuration&gt;&lt;br /&gt;  &lt;warName&gt;cas&lt;/warName&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;br /&gt;&lt;/plugin&gt;&lt;br /&gt;&lt;/plugins&gt;&lt;br /&gt;&lt;/build&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;При подключении данного плагина появляются цели jetty:run и jetty:stop. Соответсвенно первая запускает легковесный контейнер jetty на локальной машине на порту 8080. Для тестового запуска достаточно выполнить цель&lt;span style=&quot;font-weight: bold;&quot;&gt; jetty:run&lt;/span&gt;. После старта сервера можно открыть в браузере http://localhost:8080/cas/. Вы должны увидеть форму аутенфикации. Для демонстрационных целей в поставке реализован простой обработчик аутенфикации, допускающий пользователей, у которых login совпадает с password. Введя в форму аутенфикации, например, test/test вы должны увидеть сообщение об успешной аутенфикации. На ввод test/123456 система должна ответить об ошибочной попытке аутенфикации.&lt;br /&gt;Формально, если вы добрались до данного момента и у вас все работает, то вы можете вызвать цель package модуля cas-server-webapp и в директории cas-server-3.4.2/cas-server-webapp/target получить файл cas.war, который и будет нашим экземпляром cas-server-а.&lt;br /&gt;В следующей статье собираюсь остановиться на вопросе реализации обработчика аутенфикации.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/7527537011680910259/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/7527537011680910259' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7527537011680910259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7527537011680910259'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/06/ja-sig-cas.html' title='Сквозная аутенфикация при помощи JA-SIG CAS. Часть первая - сборка'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-3662060052834759099</id><published>2010-06-01T22:05:00.019+04:00</published><updated>2010-06-02T09:35:14.095+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><category scheme="http://www.blogger.com/atom/ns#" term="хакинг"/><category scheme="http://www.blogger.com/atom/ns#" term="эксплоиты"/><title type='text'>Хакинг. Искусство эксплойта</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwiimosG-es9zP-VjwnUXMpUVyvXknEcRKC1ZvYvROgL9IOdfWgAg7JlA93S6EKkU2-x133DuhTwWjO50PWaBsEZsCqozL0121RRZ6PRZL6hYj6g66J10PEfkih5Rb7aAeSAZkNu4-o3a/s1600/hacking.jpg&quot;&gt;&lt;img style=&quot;float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 281px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwiimosG-es9zP-VjwnUXMpUVyvXknEcRKC1ZvYvROgL9IOdfWgAg7JlA93S6EKkU2-x133DuhTwWjO50PWaBsEZsCqozL0121RRZ6PRZL6hYj6g66J10PEfkih5Rb7aAeSAZkNu4-o3a/s320/hacking.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5477868461487178274&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;На полках книжных магазинов не часто можно наблюдать новинки, посвященные вопросам компьютерной безопасности. Видимо так сложилось, что данная тематика не находит стабильного спроса среди российских читателей.  За практически полным отсутствием оригинальных изданий, приходится довольствоваться редкими переводами зарубежных книг. В данных условиях просто не мог отказать себе в удовольствии приобрести перевод второго издания &lt;a href=&quot;http://nostarch.com/hacking2.htm&quot;&gt;Hacking. The Art of Exploitation&lt;/a&gt; от no starch press. По сравнению с первым изданием, книга серьезно набрала в весе. По субъективным ощущениям стала толще раза в 2.&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;В книге покрывается достаточно широкий спектр вопросов компьютерной безопасности, начиная от неформального введения в программирование, что, на мой взгляд, в данной книге лишнее, продолжая вопросами низкоуровневых уязвимостей системных приложений, безопасности в сетях TCP/IP, криптографии и безопасностью wifi-сетей. В книге описываются наиболее популярные инструменты и библиотеки, используемыми хакерами, приводится достаточно большое количество простых и понятных примеров эксплоитов и сетевых утилит.&lt;br /&gt;В 500 страниц сложно было бы уложить все нюансы и аспекты каждой темы, поэтому книгу стоит рассматривать как отправную точку на пути получения знаний в области компьютерной безопасности.&lt;br /&gt;На мой взгляд, книга очень хорошо подойдет студентам, специальность которых тем или иным образом связанна с компьютерной безопасностью. Будет не лишним ознакомится с данной книгой C/C++ разработчикам, дабы посмотреть на ситуацию с другой стороны баррикад и, возможно, открыть для себя целый ряд, невидимых до этого проблем. Тестировщикам программного обеспечения (преимущественно разработанного на C) данная книга может дать представление о методах тестирования, направленного на проверку соответствия продукта требованиям безопасности.&lt;br /&gt;Если же вы знакомы с gdb, знаете что такое format string vulnerability, имеете представление о libpcap, libnet, nmap видели не только в &quot;Матрице&quot;, в курсе чем симметричное шифрование отличается от асимметричного, int $0x80, 0x90, 0xdeadbeaf - для вас не просто набор символов, то найти что-то новое в данной книге будет сложно. Лучше в данном случае, мне кажется, обратить свое внимание на &lt;a href=&quot;http://www.amazon.com/Shellcoders-Handbook-Discovering-Exploiting-Security/dp/0764544683&quot;&gt;The shellcoder&#39;s handbook&lt;/a&gt;. Жаль только эта книга, видимо на русский язык, если и будет переведена, то очень не скоро.&lt;br /&gt;Не могу не упомянуть об еще одном переводе от издательства Символ, посвященному вопросам безопасности программного обеспечения. &lt;a href=&quot;http://www.ozon.ru/context/detail/id/4839451/&quot;&gt;Fuzzing. Исследование уязвимостей методом грубой силы&lt;/a&gt;, несмотря на характерное для переводных IT-книжек отставание в 3 года от зарубежного издания, содержит достаточно интересные идеи поиска уязвимостей в программном обеспечении, не получившие широкого освещения в российской компьютерной литературе. По крайней мере мне среди русско-язычных изданий и статей упоминание о fuzzing-е, как технике тестирования ПО на безопасность не встречалось. Обе книги, на мой взгляд, являются удачным дополнением друг друга - первая описывает основные классы уязвимостей системного ПО, вторая - раскрывает одну из методик поиска данных уязвимостей.&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/3662060052834759099/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/3662060052834759099' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/3662060052834759099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/3662060052834759099'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/06/blog-post.html' title='Хакинг. Искусство эксплойта'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwiimosG-es9zP-VjwnUXMpUVyvXknEcRKC1ZvYvROgL9IOdfWgAg7JlA93S6EKkU2-x133DuhTwWjO50PWaBsEZsCqozL0121RRZ6PRZL6hYj6g66J10PEfkih5Rb7aAeSAZkNu4-o3a/s72-c/hacking.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-7713015425461411674</id><published>2010-05-25T21:46:00.012+04:00</published><updated>2010-05-27T09:44:11.505+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="методология"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><title type='text'>Deadline. Роман об управлении проектами.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj99AdXuLijXgQfeEsj3jd4N5t_AME38oHkZ18ifuSISmHk5wAZA79LIjsxGTXBUwbI6TfCYgvLNuWIzcLEIzuuSLHNeGWaAE9R5qdzj5axKp0vOeqLQRTY6z7yKQgf9hXD7dhnFhLhIbdw/s1600/deadline.jpg&quot;&gt;&lt;img style=&quot;float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 309px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj99AdXuLijXgQfeEsj3jd4N5t_AME38oHkZ18ifuSISmHk5wAZA79LIjsxGTXBUwbI6TfCYgvLNuWIzcLEIzuuSLHNeGWaAE9R5qdzj5axKp0vOeqLQRTY6z7yKQgf9hXD7dhnFhLhIbdw/s320/deadline.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5475266188827706450&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Изредка вношу изменения в список книг для прочтения. Обычно это происходит по чьему-то совету. На этот раз, мое внимание на Dedline Тома Демарко обратил &lt;a href=&quot;http://maximyudin.blogspot.com/&quot;&gt;Максим Юдин&lt;/a&gt;. С творчеством Тома Демарко был знаком по книге &lt;a href=&quot;http://www.ozon.ru/context/detail/id/2338486/&quot;&gt;Человеческий фактор. Успешные проекты и команды&lt;/a&gt;, которую отношу к классике. Впечатления получились не такие яркие, как от &quot;Цели&quot; Голдрата, но книга однозначно интересная и стоит того, чтобы уделить ей внимание.&lt;br /&gt;В Deadline используется прием выделения основных мыслей, в качестве дневника главного героя. Так что, любителям концентрата мысли достаточно будет прочитать  записи мистера Томпкинса. По сути цель остальной части книги, донести контекст формирования данных идей. Идеи же по сути являются паттернами и анти-паттернами процесса управления проектами. Отдельно хотелось бы отметить социологическую составляющую правил. Короче, если в вашей методологии управления человеку выделена роль безликого инструмента - то вашу методологию необходимо спустить в унитаз.&lt;br /&gt;Книгу можно рекомендовать абсолютно всем людям, участвующим в процессе разработки. Время на ее прочтение требуется немного (можно прочитать за выходные на даче). Также можно потратить пару часов и выписать себе дневник мистера Томпкинса в отдельный список. Я потратил. Буду иногда перечитывать. Люблю концентраты.&lt;br /&gt;&lt;/div&gt;Издательство &quot;Символ-Плюс&quot; буквально разродилось недавно целым набором книг, среди которых и &lt;a href=&quot;http://www.ozon.ru/context/detail/id/4883702/&quot;&gt;Балдеющие от адреналина, зомбированные шаблонами&lt;/a&gt; Тома Демарко в соавторстве с Тимоти Листером. Лично я уже забронировал для нее место в своем списке must-read книг.&lt;br /&gt;Да, чуть не забыл. Deadline я готов любить только за то, что в этой книге содержится фраза:&lt;br /&gt;&quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Есть тысяча и один способ потратить день зря и ни одного, чтобы вернуть этот день обратно&lt;/span&gt;&quot;.</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/7713015425461411674/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/7713015425461411674' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7713015425461411674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/7713015425461411674'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/05/deadline.html' title='Deadline. Роман об управлении проектами.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj99AdXuLijXgQfeEsj3jd4N5t_AME38oHkZ18ifuSISmHk5wAZA79LIjsxGTXBUwbI6TfCYgvLNuWIzcLEIzuuSLHNeGWaAE9R5qdzj5axKp0vOeqLQRTY6z7yKQgf9hXD7dhnFhLhIbdw/s72-c/deadline.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-8294389691152975566</id><published>2010-05-20T08:55:00.012+04:00</published><updated>2010-05-20T17:58:05.042+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="методология"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><category scheme="http://www.blogger.com/atom/ns#" term="разработка"/><title type='text'>Бережливое производство программного обеспечения. От идеи до прибыли.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS-y5ejZWk2qboL0XTNboJSCzfFDir-UWyGrMMEf9zC_sCSG3A20J1mgKdRaI_YppNkWCh3RSZoIwpN-of8seimX6MZq1ptPZyp3MNncymeeqF9t-wpPdTatn5yIm03BzgaVZ5s3k3KWY6/s1600/lean.jpg&quot;&gt;&lt;img style=&quot;float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 298px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS-y5ejZWk2qboL0XTNboJSCzfFDir-UWyGrMMEf9zC_sCSG3A20J1mgKdRaI_YppNkWCh3RSZoIwpN-of8seimX6MZq1ptPZyp3MNncymeeqF9t-wpPdTatn5yIm03BzgaVZ5s3k3KWY6/s320/lean.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5473212195106388082&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Удивительным образом иногда получается так, что книги которые идут в каком-то случайном порядке, складываются в единый звучный аккорд. Так &quot;бережливое производство&quot; попало в тон предыдущих двух книг. Прежде всего хотелось бы отметить название книги. В оригинале книга называется &quot;Implementing Lean Software Development: From Concept to Cash&quot;. Переводчик не поддался стереотипам и в результате development звучит как производство, а не как более привычное всем разработка. Именно отождествление разработки ПО с процессом производства, а точнее с наиболее успешными его практиками, является основным мотивом всей книги. Практически в каждой главе используется один и тот же прием - success story из мира промышленного производства, выделение успешных практик, лежащих в основе успеха данного случая, и проецирование данных практик в область разработки ПО. Наибольший интерес, лично для меня, представляли методы борьбы с потерями. Выделенные непроизводительные расходы в разработке ПО, сопровождаются наглядными примерами. В конце каждой главы предлагается набор предложений, ведущих к улучшению процесса. Затрагиваются вопросы отношения к персоналу, организации знания, обеспечения качества, взаимодействия. Приводится понятие квадрантов тестирования, уже знакомое по книге &lt;a href=&quot;http://freekoder.blogspot.com/2010/05/blog-post.html&quot;&gt;Гибкое тестирование&lt;/a&gt;, теории очередей, 14 заповедей Деминга, инициативы &lt;a href=&quot;http://cartmendum.livejournal.com/41632.html&quot;&gt;Шесть сигм&lt;/a&gt; и теории ограничений. В финале предоставляется руководство к действию в виде дорожной карты, как выжимка основных идей книги.&lt;br /&gt;Таким образом мог бы посоветовать в качестве горячего прочитать &lt;a href=&quot;http://freekoder.blogspot.com/2010/05/blog-post_12.html&quot;&gt;Цель&lt;/a&gt;, на второе употребить данную книгу, и в качестве сытного десерта прочитать про гибкое тестирование.&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/8294389691152975566/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/8294389691152975566' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8294389691152975566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/8294389691152975566'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/05/blog-post_20.html' title='Бережливое производство программного обеспечения. От идеи до прибыли.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS-y5ejZWk2qboL0XTNboJSCzfFDir-UWyGrMMEf9zC_sCSG3A20J1mgKdRaI_YppNkWCh3RSZoIwpN-of8seimX6MZq1ptPZyp3MNncymeeqF9t-wpPdTatn5yIm03BzgaVZ5s3k3KWY6/s72-c/lean.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-5489394939203650800</id><published>2010-05-12T16:51:00.007+04:00</published><updated>2010-05-12T17:55:26.069+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="методология"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><title type='text'>Цель. Процесс непрерывного совершенствования.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidiyycWuT3dXPD0sk1TeDWEWeqlLaDNEu6pYY1QfFm-QxGmlJM_wHzpSu4bwVRhqpayyCqHv1V0RFZqdGOU74KeE-1X8KusW52kK1zIssiooDAR8hhgp_vCS6_RDoWbWqZ0rx5AWrUakT0/s1600/goal_book.jpg&quot;&gt;&lt;img style=&quot;float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 294px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidiyycWuT3dXPD0sk1TeDWEWeqlLaDNEu6pYY1QfFm-QxGmlJM_wHzpSu4bwVRhqpayyCqHv1V0RFZqdGOU74KeE-1X8KusW52kK1zIssiooDAR8hhgp_vCS6_RDoWbWqZ0rx5AWrUakT0/s320/goal_book.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5470365652886397170&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;По совету уважаемого жж-пользователя &lt;a href=&quot;http://cartmendum.livejournal.com&quot;&gt;cartmendum&lt;/a&gt; решил выделить время на прочтение данной книги. Отзыв самого картмендума можно прочитать непосредственно &lt;a href=&quot;http://cartmendum.livejournal.com/51437.html&quot;&gt;здесь&lt;/a&gt;. Могу лишь добавить, что испытал аналогичные эмоции. Книга читается просто запоем. Настолько легко и непринужденно доносятся до читателя основные идеи. Казалось бы, ну как можно донести методологии организации производственного процесса - взять побольше формул, определений, разложить предметную область в понятийном базисе. Но нет - вот вам роман со всеми атрибутами: с первых страниц завязка, развитие сюжета, своего рода кульминация. Любовный треугольник: директор завода - завод - жена, непонимание, эмоции, переживания. Только вот концовка немного смазана, на мой взгляд. И это все про теорию ограничений. Про техническую область. Просто шикарно.&lt;br /&gt;Однозначно не стоит рассматривать идеи сосредоточенные в книге прямолинейно, с позиции применимости только к промышленному производству. Разработка программного обеспечения  тоже своего рода производство, и многие идеи теории ограничений находят отклики и в современных гибких методиках разработки ПО. Более того, можно провести прямые аналогии. Чтобы недалеко ходить, в &quot;Цели&quot; описывается момент переноса этапа проверки качества продукта в конце сборочного конвейера в точку перед станком обработки наиболее критичных деталей этого продукта. Это точ-в-точ подход к организации гибкого тестирования описанный в книге &quot;Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких команд&quot;. Тестировщик подключается к разработке на самых начальных этапах, даже раньше чем разработчик начнет написание кода. Задача тестировщика след-в-след сопровождать разработчика, не допуская компромиссов по качеству и выявляя на ранних этапах возникающий брак.&lt;br /&gt;Книга оказалась особенно актуальной в рамках моего знакомства с методологией разработки ПО Lean. Так что, если вы активный борец с потерями, то вот вам идеальный success-story.&lt;br /&gt;Книгу можно прочитать уже только за то, что она дает яркий пример зависимости мышления человека от привычек и стереотипов, и что иногда полезно окунуться в холодный чан новых знаний и увидеть, что &quot;король то голый&quot;.&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/5489394939203650800/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/5489394939203650800' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5489394939203650800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/5489394939203650800'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/05/blog-post_12.html' title='Цель. Процесс непрерывного совершенствования.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidiyycWuT3dXPD0sk1TeDWEWeqlLaDNEu6pYY1QfFm-QxGmlJM_wHzpSu4bwVRhqpayyCqHv1V0RFZqdGOU74KeE-1X8KusW52kK1zIssiooDAR8hhgp_vCS6_RDoWbWqZ0rx5AWrUakT0/s72-c/goal_book.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-723413149486794228.post-6834264089835668351</id><published>2010-05-11T09:20:00.002+04:00</published><updated>2010-05-11T20:15:07.908+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="книги"/><category scheme="http://www.blogger.com/atom/ns#" term="мнение"/><category scheme="http://www.blogger.com/atom/ns#" term="тестирование"/><title type='text'>Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких комманд.</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuSkqEVYAne3ogbWaAAYWSYV9R5xK6uVbZF0pAOZLarAwxyOrPOFYnjiR1ylGvTyXEoPCVuPaEWzj3vESLvX_gj3sIJumCXmfuo0M4vQW58zqmKyls66QM_pA2Tq7hlSP7mGXCNbM9i8yU/s1600/1001523805.jpg&quot;&gt;&lt;img style=&quot;float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 276px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuSkqEVYAne3ogbWaAAYWSYV9R5xK6uVbZF0pAOZLarAwxyOrPOFYnjiR1ylGvTyXEoPCVuPaEWzj3vESLvX_gj3sIJumCXmfuo0M4vQW58zqmKyls66QM_pA2Tq7hlSP7mGXCNbM9i8yU/s320/1001523805.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5469914088883032978&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Редко когда приходится заставлять себя дочитывать ту или иную книгу.   С данной книгой пришлось побороться. Причину сложно найти - книга составлена грамотно, впрочем как и вся серия addison-wesley. Но скучно. Просто скучно. По крайней мере для меня, как человеку бесконечно далекого до области quality assurance и тестирования ПО. Мои отношения с тестированием заканчиваются ровно на модульных тестах и причин развивать эти отношения в ближайшем будущем не предвидется. Что-то нового для себя как для разработчика подчерпнуть я не сумел, хотя общие взгляды на взаимоотношения тройки заказчик-тестировщик-разработчик поменял.&lt;br /&gt;Книга систематизирует понятие тестирования ПО (при помощи квадрантов тестирования), демонстрирует в определенной степени новую роль тестировщика ПО и его позицию в команде, указывает набор полезных практик в области тестирования, изобилует историями из жизни.&lt;br /&gt;Однозначно советовал бы данную книгу людям, занятым в области высокоуровнего тестирования ПО (на уровне приемочных тестов), особенно тем, кто погряз в рутине ручного тестирования. Книга может придать решимости амбициозным тестировщикам, которых не устраивает надменное отношение со стороны разработчиков, занять новую уникальную роль в команде. Можно советовать данную книгу менеджерам проектов, как источник здравых идей для экспериментов. Ну и наконец людям, которые не пропускают ни одной книги из серии &quot;подписанных&quot;, таким как я, например.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freekoder.blogspot.com/feeds/6834264089835668351/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/723413149486794228/6834264089835668351' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/6834264089835668351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/723413149486794228/posts/default/6834264089835668351'/><link rel='alternate' type='text/html' href='http://freekoder.blogspot.com/2010/05/blog-post.html' title='Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких комманд.'/><author><name>Александр Зотов</name><uri>http://www.blogger.com/profile/03158241480578585259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaldLt2qEH3-5QsBee1sMW9ZU_TgZNPL5ToqkcLTcy8NMgoEKnD7XsZFSCV4ruY-7TUEkrA46q_-QlJay3bFtfOEREJRhe10KogXghjUYPszmDssdWEIjTzr_hCFPcs8/s220/monkey210.jpg.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuSkqEVYAne3ogbWaAAYWSYV9R5xK6uVbZF0pAOZLarAwxyOrPOFYnjiR1ylGvTyXEoPCVuPaEWzj3vESLvX_gj3sIJumCXmfuo0M4vQW58zqmKyls66QM_pA2Tq7hlSP7mGXCNbM9i8yU/s72-c/1001523805.jpg" height="72" width="72"/><thr:total>2</thr:total></entry></feed>