четверг, 19 августа 2010 г.

Переводим Hex в обычный текст на C#

Задача: Данные шифрованные в HEX. Необходимо прочитать их.
Пример: Из 4d79206e616d652044656e6973 получаем My name Denis

Пример кода на C# реализующий эту задачу.

string hexString = richTextBox1.Text;
byte[] tmp;
int j = 0;
tmp = new byte[(hexString.Length) / 2];
for (int i = 0; i <= hexString.Length - 2; i += 2)
{
    tmp[j] = (byte)Convert.ToUInt32(Int32.Parse(hexString.Substring(i, 2),         System.Globalization.NumberStyles.HexNumber));
    j++;
}
richTextBox1.Text = Encoding.GetEncoding(1252).GetString(tmp);

Для этого не обходимо WinForm, на нее выкинуть richTextBox1 и Button1 =)

P.S.: Проверить можно тут
Спасибо за советы Tricks_Ter

Link

Инфа по J2EE
JPA, JDO
Свое представление (view) в Spring MVC
Database Connection Pool
Struts, Hibernate, Spring
JSF 2 – evaluation and test

воскресенье, 8 августа 2010 г.

Как получить ключик на MicroSoft пробукты....

:) Ответ всем кто мне пишет в скайп и icq с вопросами о ссылках и как это сделать...
Как же это делается....

1. Бежим бегом поступать в университет который учавствует в программе. Узнать это можно так Link
2. Берем зачетку и списыаем от туда номерок ваш, или берем его на кафедре.
3. заходим на сайтец, для УГТУ-УПИ он же УФУ идем на link. P.S.:с кафедрой не промахнитесь :)

нуи фоуля.... вам дают логи пас, заходим берем все ключи и удаляемся в не известном направлении :)

Для истиных патриотов MS вот линк де валяется crc суммы образов link
Наслаждаемся лицензионным ПО...

понедельник, 2 августа 2010 г.

HttpServletRequest > Данные из Servler

За частую нам необходимо получить данные о сервере, об авторизированном пользователе или еще какие данные о работающей системе
допустим это можно сделать в (View).xhtml файлах используя
request.getRemoteUser() - получение данных о пользователе, если он авторизован в системе.

Но для того чтобы получить эти данные в контроллере ил в фасаде надо обратится к интерфейсам системы таким образом:
String remoteUser = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser()


аналогично можно получить остальные данные из сервлета

среда, 28 июля 2010 г.

Доступ к AD(LDAP) для Application приложений

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class LDAPTest
{
static class LDAP
{
static String ATTRIBUTE_FOR_USER = "sAMAccountName";
public Attributes authenticateUser(String username, String password, String _domain, String host, String dn)
{

String returnedAtts[] ={ "sn", "givenName", "mail" };
String searchFilter = "(&(objectClass=user)(" + ATTRIBUTE_FOR_USER + "=" + username + "))";
//Create the search controls

SearchControls searchCtls = new SearchControls();
searchCtls.setReturningAttributes(returnedAtts);
//Specify the search scope

searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchBase = dn;
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//Using starndard Port, check your instalation

environment.put(Context.PROVIDER_URL, "ldap://" + host + ":389");
environment.put(Context.SECURITY_AUTHENTICATION, "simple");

environment.put(Context.SECURITY_PRINCIPAL, username + "@" + _domain);
environment.put(Context.SECURITY_CREDENTIALS, password);
LdapContext ctxGC = null;
try
{
ctxGC = new InitialLdapContext(environment, null);
// Search for objects in the GC using the filter

NamingEnumeration answer = ctxGC.search(searchBase, searchFilter, searchCtls);
while (answer.hasMoreElements())
{
SearchResult sr = (SearchResult)answer.next();
Attributes attrs = sr.getAttributes();
if (attrs != null)
{
return attrs;
}
}

}
catch (NamingException e)
{
System.out.println("Just reporting error");
e.printStackTrace();
}
return null;
}
}

public static void main(String[] args) throws Exception
{
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
System.out.println("Please type username:");
String username = in.readLine();
System.out.println("Please type password:");
String password = in.readLine();
LDAP ldap = new LDAP();

//Yo specify in the authenticate user the attributes that you want returned

//Some companies use standard attributes like 'description' to hold an employee ID

//The ActiveDirectory data can be enhanced to add custom attributes like

//printer

// Some instalations usually have several ACtiveDirectoryServers, lets say

// 192.150.0.8, 192.150.0.7 y 192.150.0.9 and they use a

// DNS round robin to balance the load

Attributes att = ldap.authenticateUser(username, password, "mydomain.com", "myactivedirectoryhost.com", "DC=mydomain,DC=com");
if (att == null)
{
System.out.println("Sorry your use is invalid or password incorrect");
}
else
{
String s = att.get("givenName").toString();
System.out.println("GIVEN NAME=" + s);
}
}
}

Авторизация в JSF2 через Active Derectory, GlassFish v 3.0.1 (LDAP)

Задача: Оргонизовать авторизацию пользователей через MS Active Derectory
Инструменты: GlassFish v3.0.1 OpenSource, NetBeans 9, CentOS 5.5

Настрйока GlassFish
Через web админку, заходим в rootTree > configuretion > Security > Realms
Создаем новый Realm нажатием кнопки New
заполняем поля:

Realm Name:svel <Имя которое будет использоватся в дальнейшем контесте>
Class Name:com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
JAAS Context:ldapRealm <Имя метода который мы используем fileRealm, ldapRealm и т.д.>
ldapRealm:ldap://192.168.0.1:389 <Адрес машины с AD или LDAP>
Base DN:DC=svel,DC=ru <указываем данные домена у меня он выглядит как svel.ru>

Далее добавляем 4 свойства
search-filter:(&(objectClass=user)(sAMAccountName=%s)) <Поиск пользователей в домене в обекте user в поле sAMAccountName>
search-bind-password:MyPassword <Пароль учетной записи имеющей доступ в AD или LDAP>
group-search-filter:(&(objectClass=group)(member=%d)) <Поиск групп пользователей в обекте group в поле member>
search-bind-dn:MyUser <Учетная запись имеющая права доступа в AD или LDAP>

P.S: некоторые параметры могут менятся в зависимости от использования AD(LDAP)
Список свойств :
search-bind-password = (optional) Specifies the LDAP password for the DN given in search-bind-dn .
search-bind-dn = (optional) Specifies an optional DN used to authenticate to the directory for performing the search-filter lookup. Only required for directories that do not allow anonymous search.
group-target = (optional) Specifies the LDAP attribute name that contains group name entries. The default is CN.
group-search-filter = (optional) Specifies the search filter to find group memberships for the user. The default is uniquemember=%d (%d expands to the user element DN).
group-base-dn = (optional) Specifies the base DN for the location of groups data. By default, it is same as the base-dn, but it can be tuned, if necessary.
search-filter = (optional) Specifies the search filter to use to find the user. The default is uid=%s (%s expands to the subject name).
base-dn =
Specifies the LDAP base DN for the location of user data. This base DN can be at any level above the user data, since a tree scope search is performed. The smaller the search tree, the better the performance.
directory = Specifies the LDAP URL to your server.
assign-groups = (optional) If this property is set, its value is taken to be a comma-separated list of group names. All clients who present valid certificates are assigned membership to these groups for the purposes of authorization decisions in the web and EJB containers.
jaas-context = Specifies the JAAS (Java Authentication and Authorization Service) context.

Также необходимо в JVM Options добавить свойство
-Djava.naming.referral=follow

Выборка из конфига domain.xml

< auth-realm classname="com.sun.enterprise.security.auth.realm.certificate.CertificateRealm" name="certificate" />
< auth-realm name="svel" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm">
< property name="jaas-context" value="ldapRealm" />
< property name="base-dn" value="DC=svel,DC=ru" />
< property name="directory" value="ldap://192.168.0.2:389" />
< property name="search-bind-password" value="MyPassword" />
< property name="search-bind-dn" value="MyUser" />
< property name="search-filter" value="(&(objectClass=user)(sAMAccountName=%s))" />
< property name="group-search-filter" value="(&(objectClass=group)(member=%d))" />


Конфигурирование WebApp
в web.xml

на вкладке Security выбрать тип Basic в поле RealName: svel

В пункте Security Roles добавляем роли которые используются ввашем домене в качестве CN (CN=(350) Automation department)
я указываю (350) Automation department

В пункте Security Constraints
заполняем поля и в аоле Role Name(s) указываем те роли из указанных выше, которые имеют доступ к данному разделу безопасности.

пример кода их web.xml

< security-constraint>
< display-name>Constraint1< /display-name>
< web-resource-collection>
< web-resource-name>a< /web-resource-name>
< description/>
< url-pattern>/*< /url-pattern>
< /web-resource-collection>
< auth-constraint>
< description/>
< role-name>(350) Automation department< /role-name>
< /auth-constraint >
< user-data-constraint >
< description/ >
< transport-guarantee>NONE< /transport-guarantee>
< /user-data-constraint >
< /security-constraint >
< login-config >
< auth-method>BASIC< /auth-method>
< realm-name>svel< /realm-name>
< /login-config>
< security-role>
< description/>
< role-name>(350) Automation department< /role-name>
< /security-role>


Деплойтим и пользуемся :)

P.S:Для полноценной работы с Realm советую прочитать раздел Users, Role, Realms из JavaEETutorial

и еще проверить работает ли, можно прописав в index.xhtml данные строки

Для бейсик авторизации
< h:outputText value="#{request.isUserInRole('OU=(350) Отдел автоматизации')} " /> /-
< h:outputText value="#{request.isUserInRole('(350) Automation department')} " /> /-
< h:outputText value="#{request.getPathInfo()} " />/-
< h:outputText value="#{request.getRemoteUser()} " />

для авторизации через фонму добавте
< form action="j_security_check" method="POST">
< h:panelGrid columns="2" bgcolor="#eff5fa" cellspacing="5" frame="box">
< h:outputLabel value="User ID:"/>
< h:inputText id="j_username" tabindex="1" />
< h:outputLabel value="Password:"/>
< h:inputSecret id="j_password"/>
< h:outputLabel value=""/>
< h:commandButton id="login" value="Login"/>
< /h:panelGrid>
< /form>

полезные линки
не которы команды AD(LDAP)
еще
еще

суббота, 5 июня 2010 г.

Выполнение хронимых процедур MS SQL в JavaEE 6 (JSF2)

Возникла задача, выполнения хранимых процедур из базы MS SQL 2005 в коде моего проекта.
Долгое время бился над этим, но все-таки нащел решение.

Использовал:
NetBeans 9.2 RC2
JDBC MSQSQL version 3


Пример:

1. Класс сушности
package model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.eclipse.persistence.annotations.Direction;
import org.eclipse.persistence.annotations.NamedStoredProcedureQuery;
import org.eclipse.persistence.annotations.StoredProcedureParameter;

@Entity
@NamedStoredProcedureQuery(name = "rpt_ret_test",
resultClass = MyEntity.class,
returnsResultSet = true,
procedureName = "rpt_ret_test",
parameters = {
@StoredProcedureParameter(name = "item",
queryParameter = "item", direction = Direction.IN, type = String.class)
})
public class MyEntity implements Serializable {

@Id
@Column(name = "item")
private String item;

public String getItem() {
return item;
}

public void setItem(String item) {
this.item = item;
}
}


2. Класс фасада
package controller;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import model.MyEntity;

@Stateless
public class MyEntityFacade {

@PersistenceContext(unitName = "ewqPU")
private EntityManager em;

public List customize()
throws Exception {
try {
Query query = em.createNamedQuery("rpt_ret_test");
query.setParameter("item", "sdsds Мой тестовый параметр :)");
return query.getResultList();
} catch (Exception ex) {
throw ex;
}
}
}


3. Класс предоставления данных (ViewEntity)
package controller;

import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import model.MyEntity;

@ManagedBean(name = "MyEntityView")
@RequestScoped
public class MyEntityView {

@EJB
private MyEntityFacade myEntityFacade;

public List getMyEntityFacade() throws Exception {
return myEntityFacade.customize();
}


}


4. Вывод данных на экран

в xhtml через баловый вывод JSF Entity Data table


P.S: Заработало толька на GlassFishe который щел в комплекте с NetBeans 6.9 RC2
в остальных случиях шли непонятные ошибки.
не забывайте в процедурах писать SET NOCOUNT ON ;)



Тест выполняемой процедуры
Create Procedure dbo.RPT_RET_test (@Item NVARCHAR(50))
AS
BEGIN
SELECT @item
END


PS: так как вывод быдет произведен 1 раз можно не писать SET NOCOUNT ON