<?xml version="1.0" encoding="windows-1251" ?>
<rss version="2.0">
<channel>
	<title>Java Programming</title>
	<description>All about Java</description>
	<link>http://forum.jug.com.ua/index.php</link>
	<pubDate>Wed, 08 Sep 2010 02:41:13 +0300</pubDate>
	<ttl>5</ttl>
	<item>
		<title>Хостинг для Java</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2154</link>
		<description><![CDATA[Добрый день! <br />Я занимаюсь сейчас хостингом для java. <br />Хочу спросить, <br />Какой софт бы вы хотели иметь уже установленной,  при покупки Java хостинга?<br />То что уже есть:<br />- Sun Java JDK 1.6.x<br />- Tomcat 6.x<br />- Apache, php, mod_jk, mod_proxy<br />- mysql 5.x<br />- postgresql 8.x<br /><br />т.е. на мой взляд, этого достаточно, но может быть еще что-то нужно ? Багтрек может какой-то или svn?]]></description>
		<pubDate>Thu, 05 Aug 2010 10:53:21 +0300</pubDate>
		<guid isPermaLink="false">2154</guid>
	</item>
	<item>
		<title>апдейт схемы БД в продакшене, что используете?</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2085</link>
		<description><![CDATA[Задача: есть приложение в продакшене. Раз в месяц деплоим новую версию. Часто нужно изменять схему базы данных  - создать новую таблицу, колонку, поменять тип. Или просто данные поменять. Как вы это делаете?<br />- руками sql скрипты запускаете?<br />- накодили свой код, который эти скрипты запускает?<br />- используете что-то готовое? Что?<br /><br />Мы уже год пользуем liquibase - <a href="http://www.liquibase.org/" target="_blank"><a href="http://www.liquibase.org/" target="_blank">http://www.liquibase.org/</a></a><br />Один раз запускаем его до хиберната, второй раз после. Если кому интересно, расскажу подробности.]]></description>
		<pubDate>Fri, 27 Nov 2009 22:27:10 +0200</pubDate>
		<guid isPermaLink="false">2085</guid>
	</item>
	<item>
		<title><![CDATA[Автоудаляются файлы Solr'а]]></title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2078</link>
		<description><![CDATA[Ситуация: поставил Solr (по туториалу, раздел "для Томкошки").<br /><br />Проблема: Tomcat при изменении файла %CATALINA_HOME%/conf/Catalina/&lt;hostname&gt;/solr.xml проводит, насколько я понимаю, процедуру redeploy-а и убивает всю директорию, указанную как solr/home вместе с вложенными туда конфигами и индексами.<br /><br />Вопрос: как убедить Томкошку так не поступать?]]></description>
		<pubDate>Tue, 17 Nov 2009 18:05:37 +0200</pubDate>
		<guid isPermaLink="false">2078</guid>
	</item>
	<item>
		<title>Сортування JTable та JGoodies binding (SelectionInList)</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2076</link>
		<description><![CDATA[Зіткнувся з проблемою, при використанні JGoodies binding разом з JTable, <br />яку треба сортувати та фільтрувати. Індекси в model та view при <br />використанні стандартного методі сортування (із Java туторіала) не <br />співпадають.<br /><br />Єдине рішення яке знайшов для сортування (в mailing list) - це створення <br />окремого AbstractConverter'а, який приводить індекси. Але відчуваю, що <br />при фільтрації а також через прив'язку до виділеного індексу іншої моделі,<br />можуть виникнути ще проблеми.<br /><br />Звучить знайомо?]]></description>
		<pubDate>Tue, 03 Nov 2009 21:35:34 +0200</pubDate>
		<guid isPermaLink="false">2076</guid>
	</item>
	<item>
		<title>Отслеживание изменения файлов</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2075</link>
		<description><![CDATA[Коллеги! <br /><br />Ищу толковую(желательно легковесную) библиотеку для отслеживания изменений в файлах. <br />Что-то вроде того: указал директорию, добавил listener и дальше сама либа отправляет event-ы о том, что файл такой-то был изменен. <br />Самому написать такое не проблема, но не хочу изобретать велосипед. <br /><br />Заранее спасибо, <br />Сергей]]></description>
		<pubDate>Tue, 03 Nov 2009 12:08:48 +0200</pubDate>
		<guid isPermaLink="false">2075</guid>
	</item>
	<item>
		<title>Доступ до реєстру Windows із Java</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2070</link>
		<description><![CDATA[Шукав та не знайшов.<br /><br />Допоможіть знайти безкоштовний (або не дорогий) <br />спосіб читати/писати в реєст Windows XP/Vista із Java <br />програми. Комерційний програмний продукт.<br /><br />Спробував деякі безкоштовні бібліотеки:<br /><br />1) JWinAPI - падає на Вісті.<br />2) JNA contrib - LGPL ліцензія.<br /><br />SOS.<br /><br />P.S. І як щодо роботи під Windows Resource Protection, <br />UAC?]]></description>
		<pubDate>Tue, 29 Sep 2009 23:54:44 +0300</pubDate>
		<guid isPermaLink="false">2070</guid>
	</item>
	<item>
		<title>import.sql - strange bug</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2066</link>
		<description><![CDATA[Здравствуйте.<br /><br />Такая ситуацию:<br />Seam + JPA + Hibernate приложение.<br /><br />В import.sql начальные данные.<br />Во время того, как приложение поднимается в Tomcat-e происходит импорт данных и вся кириллица загружается кракозяброй.<br /><br />Хотя юнит-тесты с тем же import.sql выполняются успешно, без кракозябры.<br /><br />В обоих случаях используется H2 in memmory база данных.<br />Та же ситуация повторяется и на MySQL и на Postgresql.<br /><br />Подскажите в каком направлении копать?]]></description>
		<pubDate>Wed, 09 Sep 2009 22:08:11 +0300</pubDate>
		<guid isPermaLink="false">2066</guid>
	</item>
	<item>
		<title>Семинар и конкурс демок по JavaFX в рамках  Chaos Constructions</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2061</link>
		<description><![CDATA[Sun Microsystems поддерживает самый известный и массовый компьютерный фестиваль в России - Chaos Constructions. <br /><br />29-30 августа в Санкт-Петербурге состоится компьютерный фестиваль Chaos Constructions'2009. Это уже 12-й компьютерный фестиваль проводимый в Санкт-Петербурге в подобном формате и собирающий сотни участников и посетителей со всей России и СНГ. Chaos Constructions'2009 - это крупнейшее в России и СНГ неформальное мероприятие, где собираются, соревнуются, обмениваются опытом сисадмины, электронщики, программисты, любители всевозможных видов компьютерного искусства и творчества. <br /><br />Приглашаем Вас принять участие в семинаре по JavaFX, а также написать замечательнейшую демку, которая обязательно победит в объявленном в рамках конференции конкурсе. <br />А если вас интересует системное програмирование, обязательно приходите на семинар по OpenSolaris, который проведет Филипп Торчинский. <br />Рассказ о новых процессорах ожидает вас на семинаре об OpenSPARC. <br /><br />Подробная информация на сайте мероприятия <a href="http://cc.org.ru/9" target="_blank"><a href="http://cc.org.ru/9" target="_blank">http://cc.org.ru/9</a></a>]]></description>
		<pubDate>Wed, 05 Aug 2009 12:40:41 +0300</pubDate>
		<guid isPermaLink="false">2061</guid>
	</item>
	<item>
		<title>Login module issue</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2060</link>
		<description><![CDATA[Здравствуйте. <br />Помогите разобраться с проблемой.<br />Написал свой логин модуль, вроде работает.<br />Но когда логинюсь, вылетает HTTP Status 403 - Access to the requested resource has been denied.<br />Заранее благодарен.<br />Appserv: Jboss-4.2.1<br />лог jbossа<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />22&#58;08&#58;42,234 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;SampleLoginModule&#93; configuration options&#58;<br />22&#58;08&#58;42,234 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug = true<br />22&#58;08&#58;42,234 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;SampleLoginModule&#93; login<br />22&#58;08&#58;42,250 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;SampleLoginModule&#93; username &#58; admin<br />22&#58;08&#58;42,250 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;SampleLoginModule&#93; success &#58; true<br />22&#58;08&#58;42,250 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;SampleLoginModule&#93; added the following Principals&#58;<br />22&#58;08&#58;42,250 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;MyPrincipal&#93; &#58; admin<br />22&#58;08&#58;42,250 INFO&nbsp;&nbsp;&#91;STDOUT&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;MyPrincipal&#93; &#58; administrator<br /><!--c2--></div><!--ec2--><br /><br />Часть web.xml<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />...<br />&nbsp;&nbsp; &#60;security-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;web-resource-collection&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;web-resource-name&#62;WebResources&#60;/web-resource-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;url-pattern&#62;/*&#60;/url-pattern&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;http-method&#62;GET&#60;/http-method&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;http-method&#62;POST&#60;/http-method&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/web-resource-collection&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;auth-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;administrator&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;manager&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/auth-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-constraint&#62;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;login-config&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;auth-method&#62;BASIC&#60;/auth-method&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;realm-name&#62;default&#60;/realm-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/login-config&#62;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;administrator&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;manager&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-role&#62;<br /><!--c2--></div><!--ec2--><br /><br />jboss-web.xml<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&#60;jboss-web&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-domain&#62;java&#58;/jaas/KapApp&#60;/security-domain&#62;<br />&#60;/jboss-web&#62;<br /><!--c2--></div><!--ec2--><br /><br />/conf/login-config.xml<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;application-policy name = &#34;KapApp&#34;&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#60;authentication&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;login-module code=&#34;com.kpi.pi.security.SampleLoginModule&#34;&nbsp;&nbsp;flag=&#34;required&#34;&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;module-option name = &#34;debug&#34;&#62;true&#60;/module-option&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/login-module&#62; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/authentication&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/application-policy&#62;<br /><!--c2--></div><!--ec2--><br /><br />код логин модуля SampleLoginModule.java<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />package com.kpi.pi.security;<br /><br />import javax.security.auth.spi.LoginModule;<br />import javax.security.auth.Subject;<br />import javax.security.auth.login.LoginException;<br />import javax.security.auth.callback.CallbackHandler;<br />import javax.security.auth.callback.Callback;<br />import javax.security.auth.callback.NameCallback;<br />import javax.security.auth.callback.PasswordCallback;<br />import java.util.Map;<br />import java.util.Set;<br />import java.util.Iterator;<br />import java.security.Principal;<br /><br />public class SampleLoginModule implements LoginModule {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected Subject subject;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected CallbackHandler callbackHandler;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected Map&#60;String, ?&#62; sharedState;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected Map&#60;String, ?&#62; options;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;// the authentication status<br />&nbsp;&nbsp;&nbsp;&nbsp;protected boolean _succeeded;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected boolean _commitSucceeded;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;// configuration options<br />&nbsp;&nbsp;&nbsp;&nbsp;protected boolean _debug;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected String _userName;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected char&#91;&#93; _password;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected Principal&#91;&#93; authPrincipals;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public void initialize&#40;Subject subject, CallbackHandler callbackHandler, Map&#60;String, ?&#62; sharedState, Map&#60;String, ?&#62; options&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.subject = subject;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callbackHandler = callbackHandler;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sharedState = sharedState;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.options = options;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// initialize any configured options<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_debug = &#34;true&#34;.equalsIgnoreCase&#40;&#40;String&#41; options.get&#40;&#34;debug&#34;&#41;&#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printConfiguration&#40;this&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;final public boolean debug&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _debug;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public boolean login&#40;&#41; throws LoginException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; login&#34;&#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;callbackHandler == null&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException&#40;&#34;Error&#58; no CallbackHandler available &#34; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;to garner authentication information from the user&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Setup default callback handlers.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callback&#91;&#93; callbacks = new Callback&#91;&#93;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new NameCallback&#40;&#34;Username&#58; &#34;&#41;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new PasswordCallback&#40;&#34;Password&#58; &#34;, false&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbackHandler.handle&#40;callbacks&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch &#40;Exception e&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_succeeded = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException&#40;e.getMessage&#40;&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String username = &#40;&#40;NameCallback&#41; callbacks&#91;0&#93;&#41;.getName&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String password =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new String&#40;&#40;&#40;PasswordCallback&#41; callbacks&#91;1&#93;&#41;.getPassword&#40;&#41;&#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; username &#58; &#34; + username&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;username.equals&#40;&#34;admin&#34;&#41; && password.equals&#40;&#34;pass&#34;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_succeeded = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_userName = &#34;admin&#34;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_password = password.toCharArray&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals = new MyPrincipal&#91;2&#93;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Adding username as principal to the subject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals&#91;0&#93; = new MyPrincipal&#40;&#34;admin&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Adding role developers to the subject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals&#91;1&#93; = new MyPrincipal&#40;&#34;administrator&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;username.equals&#40;&#34;man&#34;&#41; && password.equals&#40;&#34;1&#34;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_succeeded = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_userName = &#34;man&#34;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_password = password.toCharArray&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals = new MyPrincipal&#91;2&#93;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Adding username as principal to the subject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals&#91;0&#93; = new MyPrincipal&#40;&#34;man&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Adding roles developers and managers to the subject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authPrincipals&#91;1&#93; = new MyPrincipal&#40;&#34;manager&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#40;PasswordCallback&#41; callbacks&#91;1&#93;&#41;.clearPassword&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbacks&#91;0&#93; = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbacks&#91;1&#93; = null;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; success &#58; &#34; + _succeeded&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!_succeeded&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#34;Authentication failed&#58; Password does not match&#34;&#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public boolean commit&#40;&#41; throws LoginException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;_succeeded == false&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;subject.isReadOnly&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException&#40;&#34;Subject is ReadOnly&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// add authenticated principals to the Subject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;getAuthPrincipals&#40;&#41; != null&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for &#40;int i = 0; i &#60; getAuthPrincipals&#40;&#41;.length; i++&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!subject.getPrincipals&#40;&#41;.contains&#40;getAuthPrincipals&#40;&#41;&#91;i&#93;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getPrincipals&#40;&#41;.add&#40;getAuthPrincipals&#40;&#41;&#91;i&#93;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in any case, clean out state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cleanup&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printSubject&#40;subject&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_commitSucceeded = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch &#40;Throwable t&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;t.getMessage&#40;&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.printStackTrace&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException&#40;t.toString&#40;&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public boolean abort&#40;&#41; throws LoginException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; aborted authentication attempt.&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; aborted authentication attempt.&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;_succeeded == false&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cleanup&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if &#40;_succeeded == true && _commitSucceeded == false&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// login succeeded but overall authentication failed<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_succeeded = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cleanup&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// overall authentication succeeded and commit succeeded,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// but someone else's commit failed<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logout&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected void cleanup&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_userName = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;_password != null&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for &#40;int i = 0; i &#60; _password.length; i++&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_password&#91;i&#93; = ' ';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_password = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected void cleanupAll&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cleanup&#40;&#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;getAuthPrincipals&#40;&#41; != null&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for &#40;int i = 0; i &#60; getAuthPrincipals&#40;&#41;.length; i++&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getPrincipals&#40;&#41;.remove&#40;getAuthPrincipals&#40;&#41;&#91;i&#93;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public boolean logout&#40;&#41; throws LoginException {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_succeeded = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_commitSucceeded = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cleanupAll&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected Principal&#91;&#93; getAuthPrincipals&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return authPrincipals;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;// helper methods //<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected static void printConfiguration&#40;SampleLoginModule slm&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;slm == null&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; configuration options&#58;&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;slm.debug&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#092;tdebug = &#34; + slm.debug&#40;&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected static void printSet&#40;Set s&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator principalIterator = s.iterator&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while &#40;principalIterator.hasNext&#40;&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Principal p = &#40;Principal&#41; principalIterator.next&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println&#40;&#34;&#092;t&#092;t&#092;t&#34; + p.toString&#40;&#41;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch &#40;Throwable t&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected static void printSubject&#40;Subject subject&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;subject == null&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set s = subject.getPrincipals&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;&#40;s != null&#41; && &#40;s.size&#40;&#41; != 0&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; added the following Principals&#58;&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printSet&#40;s&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = subject.getPublicCredentials&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;&#40;s != null&#41; && &#40;s.size&#40;&#41; != 0&#41;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#40;&#34;&#092;t&#092;t&#91;SampleLoginModule&#93; added the following Public Credentials&#58;&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printSet&#40;s&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch &#40;Throwable t&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><!--c2--></div><!--ec2--><br /><br />MyPrincipal.java<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />package com.kpi.pi.security;<br /><br />import java.security.Principal;<br /><br />public class MyPrincipal implements Principal {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;private String name = null;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public MyPrincipal&#40;String name&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;name == null&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new NullPointerException&#40;&#34;name cannot be null&#34;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name = name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public String getName&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public int hashCode&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return name.hashCode&#40;&#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public String toString&#40;&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;&#91;MyPrincipal&#93; &#58; &#34; + name;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public boolean equals&#40;Object o&#41; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;o == null&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;this == o&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;!&#40;o instanceof MyPrincipal&#41;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPrincipal that = &#40;MyPrincipal&#41; o;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#40;this.getName&#40;&#41;.equals&#40;that.getName&#40;&#41;&#41;&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><!--c2--></div><!--ec2-->]]></description>
		<pubDate>Tue, 04 Aug 2009 16:47:03 +0300</pubDate>
		<guid isPermaLink="false">2060</guid>
	</item>
	<item>
		<title>JAAS</title>
		<link>http://forum.jug.com.ua/index.php?showtopic=2059</link>
		<description><![CDATA[Здравствуйте.<br />Не получается подключить jaas.<br />Какие бы логин/пароль не вводил выбрасывает на /common/login_error.html (включая те что есть в базе). Как бы игнорит databaseserverloginmodule.<br />Appserver : jboss 4.2.1<br /><br />login-config.xml <br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&#60;application-policy name = &#34;KapApp&#34;&#62;<br />&#60;authentication&#62;<br /><br />&#60;login-module code = org.jboss.security.auth.spi.DatabaseServerLoginModule&#34; flag =&#34;required&#34;&#62;<br /><br />&#60;module-option name = &#34;dsJndiName&#34;&#62;java&#58;/MySqlDS&#60;/module-option&#62;<br /><br />&#60;module-option name = &#34;principalsQuery&#34;&#62;select password from usr where login = ?&#60;/module-option&#62;<br /><br />&#60;module-option name = &#34;rolesQuery&#34;&#62;select r.name, 'Roles' from User_roleEntries_Role_userEntries ur, usr u, role r where ur.role_id = r.id and ur.usr_id = u.id and u.login = ?&#60;/module-option&#62;<br /><br />&#60;module-option name = &#34;unauthenticatedIdentity&#34;&#62;guest&#60;/module-option&#62;<br />&#60;/login-module&#62;<br />&#60;/authentication&#62;<br />&#60;/application-policy&#62; <br /><!--c2--></div><!--ec2--><br /><br /><br />web.xml<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&#60;security-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;web-resource-collection&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;web-resource-name&#62;WebResources&#60;/web-resource-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;url-pattern&#62;/*&#60;/url-pattern&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/web-resource-collection&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;auth-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;administrator&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;manager&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/auth-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-constraint&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;login-config&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;auth-method&#62;FORM&#60;/auth-method&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;form-login-config&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;form-login-page&#62;/common/login_form.html&#60;/form-login-page&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;form-error-page&#62;/common/login_error.html&#60;/form-error-page&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/form-login-config&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/login-config&#62;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;administrator&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-role&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;role-name&#62;manager&#60;/role-name&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/security-role&#62; <br /><!--c2--></div><!--ec2--><br /><br />login_form.html <br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&nbsp;&nbsp; &#60;form action=&#34;j_security_check&#34;&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Username&#58; &#60;input type=&#34;text&#34; name=&#34;j_username&#34;/&#62;&#60;br/&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Password&#58; &#60;input type=&#34;password&#34; name=&#34;j_password&#34;/&#62;&#60;br/&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;input type=&#34;submit&#34; value=&#34;Login&#34;/&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;/form&#62; <br /><!--c2--></div><!--ec2--><br /><br />jboss-web.xml <br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />&#60;jboss-web&#62;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#60;security-domain&#62;java&#58;/jaas/KapApp&#60;/security-domain&#62;<br />&#60;/jboss-web&#62; <br /><!--c2--></div><!--ec2--><br /><br />БД<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />CREATE TABLE &#96;role&#96; &#40;<br />&nbsp;&nbsp;&#96;ID&#96; int&#40;11&#41; default NULL,<br />&nbsp;&nbsp;&#96;NAME&#96; varchar&#40;200&#41; default NULL<br />&#41; ENGINE=InnoDB DEFAULT CHARSET=latin1;<br /><br />CREATE TABLE &#96;user&#96; &#40;<br />&nbsp;&nbsp;&#96;id&#96; int&#40;11&#41; NOT NULL auto_increment,<br />&nbsp;&nbsp;&#96;username&#96; varchar&#40;15&#41; default NULL,<br />&nbsp;&nbsp;&#96;password&#96; varchar&#40;250&#41; default NULL,<br />&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;&#40;&#96;id&#96;&#41;<br />&#41; ENGINE=InnoDB DEFAULT CHARSET=latin1;<br /><br />CREATE TABLE &#96;user_roleentries_role_userentries&#96; &#40;<br />&nbsp;&nbsp;&#96;ROLE_ID&#96; int&#40;11&#41; NOT NULL,<br />&nbsp;&nbsp;&#96;USR_ID&#96; int&#40;11&#41; NOT NULL,<br />&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;&#40;&#96;ROLE_ID&#96;,&#96;USR_ID&#96;&#41;<br />&#41; ENGINE=InnoDB DEFAULT CHARSET=latin1;<br /><br />INSERT INTO &#96;role&#96; VALUES &#40;1,'administrator'&#41;;<br />INSERT INTO &#96;role&#96; VALUES &#40;2,'manager'&#41;;<br />INSERT INTO &#96;user&#96; VALUES &#40;1,'admin','admin'&#41;;<br />INSERT INTO &#96;user&#96; VALUES &#40;2,'man','1'&#41;;<br />INSERT INTO &#96;user_roleentries_role_userentries&#96; VALUES &#40;1,1&#41;;<br />INSERT INTO &#96;user_roleentries_role_userentries&#96; VALUES &#40;2,2&#41;;<br /><!--c2--></div><!--ec2-->]]></description>
		<pubDate>Wed, 29 Jul 2009 15:10:59 +0300</pubDate>
		<guid isPermaLink="false">2059</guid>
	</item>
</channel>
</rss>